gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:49:26 26 4
gpt4 key购买 nike

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, str:String):Int = 1

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

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

从上下文中可以推断出的只是 bar 的参数必须以某种方式可转换为字符串。这可能是由于继承(如果您在那里使用了一些非最终类型而不是 String),或者是由于隐式转换。

基本上隐式的潜力意味着 bar 的参数几乎可以是任何类型,因此编写的代码确实没有指定。我不知道编译器在发出“缺少类型”错误之前是否真的检查了范围内是否有任何适当的隐式转换,但我猜不会。 (在 String 的情况下,无论如何可能会有一堆)。如果 baz 的签名因导入可能产生字符串的新隐式而改变,那将是脆弱和困惑的。

关于scala - 部分应用函数定义中的冗余参数类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8549393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com