CSplit和MapCanvT都是Scala Swing組件的子類型。因此,類型CanvNode始終是Component的子類型。我還沒有抓住Scala系列的功能性內容,但仍然喜歡摺疊。有什麼辦法可以減少這段代碼(除了把這個匹配放在一個函數中)並去除這些匹配嗎?Scala:訪問任何一個子類型
type CanvNode = Either[CSplit, MapCanvT]
class CSplit(var s1: CanvNode, var s2: CanvNode) extends SplitPane
{
topComponent = s1 match { case Left (s) => s; case Right (s) => s}
bottomComponent = s2 match { case Left (s) => s; case Right (s) => s}
以上編譯。理想情況下,我只會寫:
type CanvNode = Either[CSplit, MapCanvT]
class CSplit(var s1: CanvNode, var s2: CanvNode) extends SplitPane
{
topComponent = s1
bottomComponent = s2
但這不會編譯。
這似乎是靜態類型的兩個'topComponent'和'bottomComponent'將是'CanvNode',因爲你不能在編譯時有什麼比賽表達式的值產生出來。你能否提供更多關於你想要完成的事情的信息? –
@ConnorDoyle爲了清晰起見 –