【发布时间】:2016-11-16 00:02:31
【问题描述】:
简化示例:
class Factory(x : Int) {
def apply(y : Int)(z : Int) : Int = x + y + z
}
class Sample {
def get[B <% Int](x : B) = new Factory(x)
}
val s = new Sample
我想要的:s.get(2)(3)(4) 应该输出9。我得到了什么
error: type mismatch;
found : Int(3)
required: Int => Int
s.get(2)(3)(4)
^
这是完全正确的,编译器应该失败。第二个参数列表应该包含隐式转换,但它被省略了。因此出现错误。
问题是如何让编译器知道应该执行隐式解析。
我尝试过但不起作用的方法:
s.get(2)()(3)(4){s get 2}(3)(4)(s get 2)(3)(4)((s get 2))(3)(4)
显式方式有效,但它需要两行而不是一行:
val b = s get 2
b(3)(4)
我也可以显式使用apply 方法:s.get(2).apply(3)(4) 但它看起来很难看。
如何让编译器在表达式中执行隐式解析?
【问题讨论】:
-
视图边界
<%已被弃用。将其更改为<:并且它可以工作(至少它为我编译和运行)。 -
这是一个模型示例。没有隐式转换,真正的程序就无法工作。
<%仍未被弃用。如果是这样,我会仔细研究任何建议来替代这种结构的替代方案 -
@ayvango 我最近遇到的一个例子:
implicit val s = "ss"; def g(implicit s: String) = Map.empty[Int, String]; g(3)不会编译。