加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 部分应用函数定义中的冗余参数类型信息

发布时间:2020-12-16 18:18:05 所属栏目:安全 来源:网络整理
导读:def foo(num:Int,str:String):Int = 1val bar = foo(3,_) // compiler complains "missing parameter type for expanded function ((x$1) = test(3,x$1))"val baz = foo(3,_:String) // compiles fine 为什么我必须在从上下文看起来可以推断时明确指定_的类
def foo(num:Int,str:String):Int = 1

val bar = foo(3,_)  // compiler complains "missing parameter type for expanded function ((x$1) => test(3,x$1))"

val baz = foo(3,_:String) // compiles fine

为什么我必须在从上下文看起来可以推断时明确指定_的类型?

编辑:根据David Soergel的建议重命名以避免名称冲突.

解决方法

首先,为了避免“def test”和“val test”之间的混淆,让我们写一下:

def foo(num:Int,_)  // compiler complains "missing parameter type for expanded function ((x$1) => foo(3,_:String) // compiles fine

从上下文中可以推断的只是bar的参数必须以某种方式转换为String.这可能是由于继承(如果不是String,你在那里使用一些非final类型),或者由于隐式转换.

基本上implicits的可能性意味着bar的参数可能只是任何类型,所以编写的代码确实是不明确的.在发出“缺失类型”错误之前,我不知道编译器是否实际检查范围内是否有任何适当的隐式转换,但我猜不会. (在String的情况下,无论如何都可能存在一堆).如果baz的签名由于导入可能产生String的新隐式而改变,那将是脆弱和混乱的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读