我可以从scala中的重载方法获取函数吗?
发布时间:2020-12-16 19:21:51 所属栏目:安全 来源:网络整理
导读:假设我有两个使用相同名称和返回定义的方法,但是不同的参数: def overload(x: Int) = x.toStringdef overload(s: String) = s 现在我想将其中一个转换为函数.如果方法没有超载,我会这样做: val f = overload _ 但是既然如此,编译器正确地抱怨了一个含糊不
假设我有两个使用相同名称和返回定义的方法,但是不同的参数:
def overload(x: Int) = x.toString def overload(s: String) = s 现在我想将其中一个转换为函数.如果方法没有超载,我会这样做: val f = overload _ 但是既然如此,编译器正确地抱怨了一个含糊不清的引用.除了重命名其中一个之外,有没有办法让一个或另一个重载方法的功能? 谢谢! 约翰 解决方法
编译器在直接调用时知道调用哪个重载的方式是通过知道它应用的参数的类型.重载someInt只能引用overload(x:Int),所以没有歧义.
当你从中创建一个函数时,你还没有提供一个参数,所以编译器不知道你希望函数是什么类型,所以它不知道你指的是哪个重载. 解决这个问题的简单方法是明确告诉它类型: val f : Int => String = overload _ 要么: val f = (x : Int => overload x) 要么: val f = overload (_ : Int) (注意:我还没有测试过这些,但是它们的一些变化应该有效) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |