假设我有两个使用相同名称和返回定义的方法,但是不同的参数:
def overload(x: Int) = x.toString
def overload(s: String) = s
Run Code Online (Sandbox Code Playgroud)
现在我想将其中一个转换为函数.如果方法没有重载,我会这样做:
val f = overload _
Run Code Online (Sandbox Code Playgroud)
但事实上,编译器正确地抱怨了一个含糊不清的引用.除了重命名其中一个之外,有没有办法让一个或另一个重载方法的功能?
谢谢!
约翰
Ben*_*Ben 15
编译器overload在直接调用时知道调用哪种方式是通过了解它所应用的参数的类型.overload someInt只能指overload(x: Int),所以没有歧义.
当你从中创建一个函数时,你还没有提供一个参数,所以编译器不知道你希望函数是什么类型,所以它不知道overload你指的是哪个.
解决这个问题的简单方法是明确告诉它类型:
val f : Int => String = overload _
Run Code Online (Sandbox Code Playgroud)
要么:
val f = (x : Int => overload x)
Run Code Online (Sandbox Code Playgroud)
要么:
val f = overload (_ : Int)
Run Code Online (Sandbox Code Playgroud)
(注意:我还没有测试过这些,但是它们的一些变化应该有效)
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |