scala中的别名方法?

scala中的别名方法?,scala,Scala,我试图弄清楚Scala编程语言是否有别名(对于同一内存位置存在两个或多个不同的引用方法) 我可以看到类型别名的示例,例如“x:(Int,String)=(1,one)”。那么x有两种不同的类型,但是它们共享相同的内存吗 如果有人能给出更多的解释,我将不胜感激。如果你想让一个“变量”跟踪另一个,你可以这样做 scala> var x = 5 // create a variable x: Int = 5 scala> def y = x // keep track of x y:

我试图弄清楚Scala编程语言是否有别名(对于同一内存位置存在两个或多个不同的引用方法)

我可以看到类型别名的示例,例如“x:(Int,String)=(1,one)”。那么x有两种不同的类型,但是它们共享相同的内存吗

如果有人能给出更多的解释,我将不胜感激。

如果你想让一个“变量”跟踪另一个,你可以这样做

scala> var x = 5  // create a variable
x: Int = 5

scala> def y = x  // keep track of x
y: Int

scala> x = 9      // change x
x: Int = 9

scala> y          // yep, y changes too
res1: Int = 9
这不是真实的别名。您不能修改
y
并在
x
中查看更改。
def
每次调用时都会重新计算,因此每次查询
y
,它都会重新检查
x
的当前值


注意,这种类型的东西不被认为是好的Scala实践。在函数式编程中,您希望避免维护状态的数据结构,也就是说,如果不需要,就不要使用
var
,而优秀的Scala程序员几乎永远不需要使用。

这不是类型别名,而是模式匹配。类型别名是
Type Str=String
,它可以替换任何出现的
String
类型。您可以使用
other
,它允许您存储两种类型,例如
val e:other[Int,Double]=Left(1)
,但是
Int
Double
的大小不同,我不知道它们是否共享相同的内存,这取决于你所说的“相同内存”是什么意思,但这也真的不重要,因为Scala语言(以及JVM本身)的全部目的是消除程序员对这些类型的担忧。内存分配可能会随着版本的变化而变化,但这不会破坏任何设计良好的程序。我认为您正在寻找一个新的解决方案。现在最好的是
或者[A,B]
,这两个变量没有共享相同的内存位置,它只是用代数数据类型来表示其中一种类型(
A
或者
B
)。可能是重复的,我认为他不需要引用跟踪,他需要求和类型。