我Scala: can't write setter without getter?發現,你不能沒有消氣創建一個setter:爲什麼你不能在scala中創建一個沒有getter的setter?
分配到 解釋一個簡單的變量x = E取決於x的 定義。如果x表示 可變變量,則分配 將x的當前值改變爲 評估 表達式e的結果。 e的類型是 預期符合x的類型。 如果x爲在某些模板中定義的參數的函數 ,並且相同的 模板包含setter函數 X_ =作爲成員,則分配對象x = e爲解釋爲設定器的調用 X _ =(e)中功能。 類似地,賦值f.x = e到 無參數函數x被解釋爲調用f.x_ =(e )。將具有 函數應用於 左邊的賦值f(args)= e的'='運算符解釋爲f.update(args,e) ,即由f定義的更新函數的調用 。
所以這是一個設計決定,不允許setter沒有getter。但爲什麼? 難道只是難以實施,還是根本無法做到?
我確實有一個有效的用例,用它作爲一個(有點複雜的)setter,不使用這個語法糖會破壞項目中任何地方的相同語法。
你能解釋一下情況嗎?爲什麼它有一個*問題*有一個getter? –
@NathanielFord問題是它是一個API的一部分,它會混淆用戶認爲可以使用吸氣劑。情況:A類的一個對象有一個設置器來設置一定的值。 B類對象與A類的對象「連接」,可以使用具有相同名稱的getter來獲取該值。把它看作兩個設備之間的連線,其中一個設備只有一個輸出,這是另一個設備的輸入:(在A類中)out.value = 3.0和(在B類中)println(in.value ) –
@ coolcat007:在這種情況下,您可能應該使用明確的setter方法而不是賦值。 – Bergi