gpt4 book ai didi

scala - scala中的合成函数 "##"

转载 作者:行者123 更新时间:2023-12-03 14:06:07 24 4
gpt4 key购买 nike

我最近看到了一些类似这样的代码:

val x: Any = "a"
val y = x.## // y: Int = 97

好吧,输出只是“a”的 ASCI 值,但让我们看看
List(1,2).## // Int = 985731359
List(1,2).toString.## // Int = 1063384434

我的 IDE 告诉“##”它是一个“合成函数”。那么## 在做什么,什么是合成函数?

最佳答案

它基本上是 hashCode 的别名,有几个值得注意的异常(exception),使其更安全:

Equivalent to x.hashCode except for boxed numeric types and null. For numerics, it returns a hash value which is consistent with value equality: if two value type instances compare as true, then ## will produce the same hash value for each of them. For null returns a hashcode where null.hashCode throws a NullPointerException.


(来源: https://www.scala-lang.org/api/current/scala/Any.html###:Int)
例子:
正常值
scala> val x: Any = "a"
x: Any = a

scala> x.hashCode
res2: Int = 97

scala> x.##
res3: Int = 97
空值
scala> null.hashCode
java.lang.NullPointerException
... 33 elided

scala> null.##
res5: Int = 0

相反,合成字段是编译器生成的字段,用于解决底层 JVM 限制,尤其是在处理内部匿名类时,这是一个与 JVM 无关的概念。
下面是它的详细含义的一个很好的解释: http://javapapers.com/core-java/java-synthetic-class-method-field/

关于scala - scala中的合成函数 "##",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054647/

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