是否有任何計劃實現類似於CoffeeScript功能的ruby行爲在方法參數列表中指定實例變量名稱? 像Ruby:自動設置實例變量作爲方法參數?
class User
def initialize(@name, age)
# @name is set implicitly, but @age isn't.
# the local variable "age" will be set, just like it currently works.
end
end
我知道這個問題的:in Ruby can I automatically populate instance variables somehow in the initialize method?,但所有的解決方案(包括我自己)似乎並不適合簡單的紅寶石理念。
而且,這種行爲會有什麼缺點嗎?
UPDATE
其中的一個原因,這是DRY(不要重複自己)Ruby社區的理念。我經常發現自己需要重複一個參數變量的名稱,因爲我想將它分配給同名的實例變量。
def initialize(name)
# not DRY
@name = name
end
我可以想到的一個缺點是,它可能看起來好像一個方法沒有任何功能,如果它沒有身體。如果你正在快速掃描,這可能看起來像沒有任何操作。但我覺得有時間,我們可以適應。另一個缺點是:如果你在正文中設置了其他實例變量,並且你試圖通過把所有的任務放在開頭來讀取它,那麼它可能需要更多的認知「權力」來看到在那裏也有分配參數列表。但我不認爲這比看到一個常數或方法調用並且不得不跳到它的定義更困難。
# notice: instance var assignments are happening in 2 places!
def initialize(@name)
@errors = []
end
感謝您的回答。它絕對看起來像更多的工作,但它是值得的。 :) – hrdwdmrbl
@jackquack好吧,你真的只需要做一次安裝。然後在你的課程中,你所要做的就是調用'enable_for'和'slurp_args'。 – Kelvin