blob: 6be8bf9e89092dd104f4813104c9c3bf6664132f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
// for 2.7.x compatibility
object A {
implicit val one = 1
}
object Test {
locally {
import A._
locally {
// assert(implicitly[Int] == 1) // error: could not find implicit value for parameter e: Int.
// !!! Why one A.one?
// (I assume you mean: why _not_ A.one? A.one is shadowed by local one.
// but the local one cannot be used yet because it does not have an explicit type.
implicit val one = 2
assert(implicitly[Int] == 2)
assert(one == 2)
}
}
locally {
import A._
implicit val one: Int = 2
assert(implicitly[Int] == 2)
assert(one == 2)
}
locally {
import A.one // warning: imported `one' is permanently hidden by definition of value one.
// !!! Really?
//assert(implicitly[Int] == 1)
implicit val one = 2
assert(implicitly[Int] == 2) // !!! why not 2?
assert(one == 2)
}
locally {
import A.one
assert(implicitly[Int] == 1)
implicit val two = 2
assert(implicitly[Int] == 2) // !!! Not ambiguous in 2.8.0. Ambiguous in 2.7.6
}
locally {
import A._
assert(implicitly[Int] == 1)
implicit val two = 2
import A.{one => _}
assert(implicitly[Int] == 2) // !!! Not ambiguous in 2.8.0. Ambiguous in 2.7.6
}
locally {
import A.{one => _, _}
implicit val two = 2
assert(implicitly[Int] == 2) // not ambiguous in 2.8.0 nor im ambiguous in 2.7.6
}
}
|