gpt4 book ai didi

Scala lambda 函数在声明参数类型时未解析?

转载 作者:行者123 更新时间:2023-12-04 17:54:20 25 4
gpt4 key购买 nike

在Scala中定义方法时,我发现了这个

def method1: Int => Int = (j: Int) => j  // works
def method2: Int => Int = j => j // works
def method3: Int => Int = j: Int => j // error
def method4: Int => Int = {j: Int => j} // works

谁能解释为什么 method3 不起作用?有没有歧义?

最佳答案

一个可能的解释确实是这个限制避免了歧义:x: A => B 可以理解为一个匿名函数,它接受类型为 的参数 x >A 并返回对象 B。或者可以理解为将变量x“转换”为类型A => B。这两个都是有效的程序是非常罕见的,但并非不可能。考虑:

class Foo(val n: Int)
val Foo = new Foo(0)
val j: Int => Foo = new Foo(_)

def method1: Int => Foo = (j: Int) => Foo
def method2: Int => Foo = j: Int => Foo

println(method1(1).n)
println(method2(1).n)

这实际上编译并打印:

0
1

关于Scala lambda 函数在声明参数类型时未解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310315/

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