2015-05-24 19 views
1

我剛開始探索Scala。假設我有以下代碼:如何在scala中定義一個多態的引用變量

abstract class Shape 
case class Square() extends Shape 
case class Circle() extends Shape 
case class Triangle() extends Shape 

有了這樣的,我可以定義指在Java形狀的參考,然後我可以在它作爲波紋管存儲式樣子類的對象:

Shape s=null; 
s=new Circle(); 
s=new Square(); 
s=new Triangle(); 

我的問題: 什麼是Scala(請注意,我不希望只定義一個變量,也就是在這兒)上面的代碼對應

回答

0

簡單:

var s: Shape = null 
s = Circle() 
s = Square() 
s = Triangle() 

如果你是一個Option -zealot:如果你

var s: Option[Shape] = None 
s = Some(Circle()) 
s = Some(Square()) 
s = Some(Triangle()) 

一個val-zealot

val s1 = Circle() 
val s2 = Square() 
val s3 = Triangle() 

流行的看法相反,varnull在小範圍完全罰款。

1

你可以寫這樣的代碼:

var s: Shape = null 
s = new Circle() 
s = new Square() 
s = new Triangle() 

然而,Scala是原本的意思是功能使用。所以你應儘可能使用val而不是varval與Java中的final非常相似。

每次您使用var而不是val時,您應該100%確定要這樣做。

此外,儘量避免null s。相反,使用Option。也許你對一些文獻感興趣,如this book