【问题标题】:can I get a function from an overloaded method in scala?我可以从 scala 中的重载方法中获取函数吗?
【发布时间】:2011-10-19 12:57:37
【问题描述】:

假设我定义了两个具有相同名称和返回但参数不同的方法:

def overload(x: Int) = x.toString
def overload(s: String) = s

现在我想将其中一个转换为函数。如果方法没有重载,我会这样做:

val f = overload _

但既然是这样,编译器就会正确地抱怨一个模棱两可的引用。除了重命名其中一个重载方法之外,还有什么方法可以使其中一个或另一个重载方法的功能?

谢谢!

约翰

【问题讨论】:

    标签: scala


    【解决方案1】:

    当您直接调用它时,编译器知道要调用哪个overload 的方法是知道它所应用的参数的类型。 overload someInt只能指overload(x: Int),所以没有歧义。

    当你用它创建一个函数时,你还没有提供参数,所以编译器不知道你想要你的函数是什么类型,所以它不知道你是哪个overload参考。

    解决这个问题的简单方法是明确告诉它类型:

    val f : Int => String = overload _
    

    或:

    val f = (x : Int => overload x)
    

    或:

    val f = overload (_ : Int)
    

    (注意:我还没有测试过这些,但它们的一些变化应该可以工作)

    【讨论】:

    • 谢谢本。我会试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多