scala中的别名方法?
我试图弄清楚Scala编程语言是否有别名(对于同一内存位置存在两个或多个不同的引用方法) 我可以看到类型别名的示例,例如“x:(Int,String)=(1,one)”。那么x有两种不同的类型,但是它们共享相同的内存吗 如果有人能给出更多的解释,我将不胜感激。如果你想让一个“变量”跟踪另一个,你可以这样做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> 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
)。可能是重复的,我认为他不需要引用跟踪,他需要求和类型。