面向型別程式設計/受限屬性
外觀
< 面向型別程式設計
雖然子型別通常是擴充性的,也就是說,子型別包含其超型別的所有屬性,但在某些情況下,從子型別中移除繼承的屬性很有用。例如,複數具有實部和虛部。每個實數也是複數,但其虛部始終等於零,因此我們不希望此屬性佔用例項中的空間。但是,我們不能完全移除虛部,因為它可能會被用於處理複數的程式碼。我們可以做的是為屬性分配一個固定值
type Complex {
property real Float
property imag Float
func _add(x Complex) Complex {
return new Complex {
real=self.real+x.real,
imag=self.imag+x.imag
}
}
func _mul(x Complex) Complex {
return new Complex {
real=self.real*x.real-self.imag*x.imag,
imag=self.real*x.imag+self.imag*x.real
}
}
func description() String {
return self.real.description() + "+" + self.imag.description() + "i"
}
}
type Real : Complex {
restrict imag Float = 0.0
}
main {
var x = new Complex { real=2.0, imag=3.0 }
var y = new Real { real=2.0 }
return (x*y).description()
}
請注意,Real 型別現在只有一個儲存屬性,但 Complex 型別中的方法仍然可以與子型別一起使用。
注意:可以使用 Funcy 應用程式試用虛擬碼,該應用程式可以從 Apple 的 App Store (iOS/macOS)、Google Play (Android) 或 Amazon Appstore 免費下載。要執行的程式碼必須放在 main {} 塊中。