gpt4 book ai didi

java - 有线 scala 类型设计

转载 作者:搜寻专家 更新时间:2023-11-01 04:06:40 26 4
gpt4 key购买 nike

我的环境是:

Scala 版本 2.9.1.final(Java HotSpot(TM) 64 位服务器虚拟机,Java 1.6.0_26)。

先看这个例子:

scala> var a = 1
a: Int = 1

scala> var c = 'c
c: Symbol = 'c

scala> var d = 1.1
d: Double = 1.1

scala> var b = "123"
b: java.lang.String = 123

scala> val e:String = "234"
e: String = 234

所以,你可以看到除了字符串之外的其他文字,默认类型是Scala Types(Int Double Symbol.

但是字符串文字是Java类型。(java.lang.String

并且当您使用 Scala 类型 String 定义一个值时,String 文字将是 Scala String 类型。

为什么字符串文字的默认类型不是 Scala 字符串?

第二个:

当您必须从 java 调用 scala 方法时。

和你的带有这样参数的scala方法:

def hello(i:Int) = {
println(i)
}

在 Java 方面。如果你这样打电话。

object.hello(null)

它将因类型不匹配而失败。

java.lang.Integer 可以为空。但 scala Int 不能为空。

null 在 scala 中是 AnyRef 的子类型。不是 AnyVal..

我发现 AnyRef 和 A​​nyVal 把我带到了 java1.4 的世界,它没有 autobox..。

最佳答案

第一个问题的答案:

scala.String 只是在 Prelude Predef 中定义的一个类型同义词,用于旧的 java .lang.String. (与 scala.Intscala.Float 等不同,它们与 java.lang.Integerjava.lang 不同。 float 等)

这可能会有所帮助:(观察类型。)

scala> def f(s: String) = s * 2
f: (s: String)String

scala> f("hello")
res7: String = hellohello

scala> def f(s: String): java.lang.String = s * 2
f: (s: String)java.lang.String

scala> f("hello")
res8: java.lang.String = hellohello

scala> type Str = String
defined type alias Str

scala> def f(s: String): Str = s * 2
f: (s: String)Str

scala> f("hello")
res9: Str = hellohello

关于java - 有线 scala 类型设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632168/

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