我对 Scala 函数比较陌生,我对这种语法糖的实际工作方式以及何时使用特定类型感到困惑。
我已经编写了 3 个函数,它们都应该做同样的事情,但是我在理解为什么 Function0 的行为不同时遇到了问题
版本 1
val fn1 : (String) => String = System.getProperty(_)
println(fn1("os.name"));
Run Code Online (Sandbox Code Playgroud)
版本 2
val fn2 : () => String = System.getProperty("os.name")
println(fn2());
Run Code Online (Sandbox Code Playgroud)
版本 2 给出了类型不匹配;找到:所需的字符串:() ? 细绳
版本 3
val fn3 = () => System.getProperty("os.name")
println(fn3());
Run Code Online (Sandbox Code Playgroud)
我知道对于版本 2 scala 已经知道 System.getProperty 的返回类型,但是为什么它会产生那个特定的错误,为什么它会阻止我明确说明返回类型。我个人更喜欢显式返回类型,所以我不必深入研究一个方法来查看它返回的内容。
在 中val fn2 : () => String = System.getProperty("os.name"),System.getProperty("os.name")将被执行并返回一个字符串值。但是你说的fn2是一个值,它是一个不带参数并返回一个字符串的函数。
当您执行 时System.getProperty(_),就像执行x => System.getProperty(x),它是一个接受字符串并返回字符串的函数。这就是为什么第一个版本有效。
| 归档时间: |
|
| 查看次数: |
583 次 |
| 最近记录: |