メソッドの引数リストにインスタンス変数名を指定するCoffeeScriptの機能に似た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
私はこの質問を認識しています.Rubyでは、initializeメソッドで何らかの方法でインスタンス変数を自動的に設定できますか? 、しかし、すべての解決策 (私自身のものを含む) は、Ruby のシンプルさの哲学に適合していないようです。
そして、この振る舞いをすることの欠点はありますか?
アップデート
その理由の 1 つは、Ruby コミュニティの DRY (同じことを繰り返すな) 哲学です。同じ名前のインスタンス変数に割り当てたいため、引数変数の名前を繰り返す必要があることがよくあります。
def initialize(name)
# not DRY
@name = name
end
私が考えることができる 1 つの欠点は、メソッドに本体がない場合、メソッドが何もしていないように見えることです。すばやくスキャンしている場合、これはノーオペレーションのように見えるかもしれません。しかし、時間があれば、適応できると思います。
もう 1 つの欠点: 本体に他のインスタンス変数を設定していて、最初にすべての代入を配置して読みやすくしようとすると、引数リストでも代入が行われていることを確認するために、より認知的な「力」が必要になる可能性があります。しかし、これは、たとえば、定数またはメソッドの呼び出しを見て、その定義にジャンプしなければならないことよりも難しいとは思いません。
# notice: instance var assignments are happening in 2 places!
def initialize(@name)
@errors = []
end