gpt4 book ai didi

scala - 用 "underscore shorthand"编写时无法识别 apply() 的魔法

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

以这段代码为例。这曾经是一个案例类,但我将类和对象分开,为对象提供更多方法:

package graphs

class City(val x: Int, val y: Int) {
def dist(other: City): Double = {
val xdist = x - other.x
val ydist = y - other.y
floor(sqrt(xdist * xdist + ydist * ydist) + 0.5)
}
}

object City {
// def apply ( x: Int, y: Int) = new City(x, y)
def apply = new City(_, _)
}

我一直理解的方式是,用速记写的 apply 方法完全等同于注释掉的方法,Scala 控制台似乎同意我的看法:
scala> graphs.City.apply
res1: (Int, Int) => graphs.City = <function2>

但是在使用该方法时存在一个问题:
scala> graphs.City.apply(1,2)
res4: graphs.City = graphs.City@400ff745

scala> graphs.City(1,2)
<console>:8: error: graphs.City.type does not take parameters
graphs.City(1,2)

当我在 Eclipse 中编写它时,错误完全相同。如果我将方法定义切换到注释掉的那个(较长的那个),就没有这个问题了。

是我不知道的某些理想行为还是应该报告的错误?我正在使用 Scala 2.10.1。

最佳答案

它不一样,所以告诉你 REPL。注释掉的版本是一个方法,它接受两个参数并返回一个 City 的实例。 .第二个版本不接受参数并返回类型为 (Int,Int) => City 的函数。 .两者完全不同。

关于scala - 用 "underscore shorthand"编写时无法识别 apply() 的魔法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074829/

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