我想添加一個名爲「enabled?」的屬性到一個既有吸氣又有吸氣器的模型。然而,當我做到以下幾點:如何爲名稱以問號結尾的房產定義一個setter?
def enabled?= value
# .. logic goes here ..
end
我得到syntax error, unexpected '?', expecting '\n' or ';'
什麼我應該不是做?
我想添加一個名爲「enabled?」的屬性到一個既有吸氣又有吸氣器的模型。然而,當我做到以下幾點:如何爲名稱以問號結尾的房產定義一個setter?
def enabled?= value
# .. logic goes here ..
end
我得到syntax error, unexpected '?', expecting '\n' or ';'
什麼我應該不是做?
是的,ruby語法只允許在方法名中使用?
(如果它是最後一個字符),所以foo?=
無效。你可以做的一件事情就是非常習慣,就是定義enabled?
,enable
和disable
(或enable!
和disable!
,如果你想強調他們是變異的方法)。
如果這不符合您的需求,您可以將方法命名爲enabled?
和enabled=
,只是在名稱之間存在輕微的不一致性。
[ 有關感嘆號通常表示的信息在[downcase和downcase之間的區別!在Ruby中](http://stackoverflow.com/questions/709229/difference-between-downcase-and-downcase-in-ruby/709271) – 2010-08-12 23:19:06
紅寶石中的方法名稱以小寫字母或下劃線開頭,可選地後跟大寫和小寫字母下劃線和小數點。方法名稱可以有選擇地以問號,感嘆號或等號結束。
所以你不能!
你可以按照定義的啓用爲按照通常的紅寶石成語: -
def enabled?
@enabled
end
def enabled=(value)
@enabled = value
end
來概括。如果你想將屬性公開給外部世界,那麼確保你的變量名將允許在方法名稱規則的範圍內。
名稱你的財產只是enabled
查詢方法只是語法糖,他們是不是故意要用作屬性或實例變量。如果你願意,你可以添加方法enabled?
的語法糖。
我一直將我的布爾變量命名爲'is',如'isEnabled'。然後它具有與不需要複雜性的問號相同的含義。
它會更好地遵循ruby/rails標準(似乎並不複雜'對我來說 - 只是?最後)。否則,與其他開發人員共享的代碼將很難閱讀,因爲讀者/維護人員現在必須使用您的代碼而不是標準方法,或者只是使用更差的代碼。我曾經最後用_yn自己做這件事,直到我學得更好 – 2011-07-18 12:29:05
始終使用這些標準。如果你想走自己的路,請加入樂隊。 – 2014-10-10 14:00:54
一個小的變化將是別名getter方法,同時允許enabled
和enabled?
:
def enabled
@enabled
end
def enabled=(value)
@enabled = value
end
alias_method :enabled?, :enabled
不要在變量名使用標點符號。 – DanDan 2010-08-12 14:28:37
@DanDan:使用?對於布爾getters是紅寶石的標準,不這樣做會相當單一。 – sepp2k 2010-08-12 15:13:54