gpt4 book ai didi

scala - 类构造函数声明...声明同一件事的两种方法?

转载 作者:行者123 更新时间:2023-12-04 06:38:51 24 4
gpt4 key购买 nike

我想举例说明一下此声明之间的区别:

class Clazz(param1: String, param2: Integer)

和这个:
class Clazz(param1: String)(param2: Integer)

第二个声明只是影响实例化对象的方式,还是我不知道的更深层原因。

我考虑过的一个原因是参数的多个可变长度,例如:
class Clazz(param1: String*)(param2: Integer*)

还有其他吗?

最佳答案

#1 类型推断。它从左到右,并按参数列表完成。

scala> class Foo[A](x: A, y: A => Unit)
defined class Foo

scala> new Foo(2, x => println(x))
<console>:24: error: missing parameter type
new Foo(2, x => println(x))
^

scala> class Foo[A](x: A)(y: A => Unit)
defined class Foo

scala> new Foo(2)(x => println(x))
res22: Foo[Int] = Foo@4dc1e4

#2 隐式参数列表。
scala> class Foo[A](x: A)(implicit ord: scala.Ordering[A]) {
| def compare(y: A) = ord.compare(x, y)
| }
defined class Foo

scala> new Foo(3)
res23: Foo[Int] = Foo@965701

scala> res23 compare 7
res24: Int = -1

scala> new Foo(new {})
<console>:24: error: No implicit Ordering defined for java.lang.Object.
new Foo(new {})
^

关于scala - 类构造函数声明...声明同一件事的两种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9308872/

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