自型看起來像以下示例:自我類型中`=>`背後的原因是什麼?
trait A { self: String => }
這是說,該性狀A
(或它的一個子類型)必須繼承類String
。
關鍵字self
後跟:
類似物到一個變量中var s: String
,其中類型來:
之後。
但是=>
在自我類型中聲明的是什麼?這背後的原因是什麼?
自型看起來像以下示例:自我類型中`=>`背後的原因是什麼?
trait A { self: String => }
這是說,該性狀A
(或它的一個子類型)必須繼承類String
。
關鍵字self
後跟:
類似物到一個變量中var s: String
,其中類型來:
之後。
但是=>
在自我類型中聲明的是什麼?這背後的原因是什麼?
只是猜測工作...你需要一些自我類型聲明的特定分隔符。想象一下=>
只是被省略了。 this: String
將是一個語法上有效的語句(儘管類型檢查器會投訴)。
那應該是哪個分隔符?你不會想要像trait A { self: String { ... }}
這樣的嵌套花括號。那麼存在哪些不配對的現有分隔符? =>
是我能想到的唯一一個。
=>
=>
在哪裏?作爲函數類型的糖(A => B
)和函數體(i: Int => i + 1
)。也適用於按名稱參數以及模式匹配的情況。這最後一次使用與自我類型有點相關。這就像匹配this
是一個特定的類型,然後根據這個「匹配」來定義主體。我不知道,也許這是一個愚蠢的比喻。
感謝您分享您對該主題的看法。聽起來不錯。我嘗試了一個類似的方向。 –
請注意,self
不是一個關鍵字,而是一個正常的標識符。你真的可以寫任何其他有效的標識符代替self
。並且:
在表達式是類型歸屬之後,在表達式有效的任何地方都是完全有效的。
=>
是告訴斯卡拉有一個自我類型。否則,self: Type
看起來像一個簡單的陳述,一個表達式。例如:
class A
class B extends A {
this: A
}
這是有效的Scala代碼,它沒有自我類型。
好點,謝謝。使用'=>'作爲自我類型的符號還是僅僅是因爲它符合Scalas語法的其餘部分? –
@JohnThreepwood Odersky反對保留符號和關鍵字,因此他試圖重複使用他擁有的符號和關鍵字。我認爲,當談到強調時他說得太過分了,但事實就是這樣。 –
this
在一個類的主體內部,所以在這個意義上它是一個參數(儘管我們從來沒有這樣想過)。自我類型語法只是簡單明瞭,並允許給它一個不同的名稱(和類型)。所以箭頭成爲一個非常好的選擇,作爲活頁夾與其範圍之間的分隔符。
這是一個奇怪的位語法我認爲,因爲它看起來像一個箭頭,將指向某些東西... – david
是的,在學習斯卡拉開始時,我總是認爲箭頭指向身體的其餘部分,看起來像一個功能,讓我很困惑。 –