ハッシュを唯一の引数として受け取っている場合、それをインスタンス変数として保持しないのはなぜですか? 値が必要なときはいつでも、ハッシュから呼び出します。簡単に呼び出せるように、インスタンス変数名を短くすることができます。
class Foo
attr_reader :p
def initalize p
@p = p
end
def foo
do_something_with(@p[:name])
...
end
end
それでも長すぎる場合@p[:name]
は、proc をインスタンス変数として保存し、関連する値を のように呼び出すことができます@p.(:name)
。
class Foo
attr_reader :p
def initialize p
@p = ->x{p[x]}
end
def foo
do_something_with(@p.(:name))
...
end
end
または、別の方法として、ハッシュを呼び出してキーを適用するメソッドを定義することもできます。
class Foo
def initalize p
@p = p
end
def get key
@p[key]
end
def foo
do_something_with(get(:name))
...
end
end
値を設定したい場合は、setter メソッドを定義し、必要に応じて無効なキーをさらにチェックできます。
class Foo
Keys = [:name, :age, :email, :gender, :height]
def initalize p
raise "Invalid key in argument" unless (p.keys - Keys).empty?
@p = p
end
def set key, value
raise "Invalid key" unless Keys.key?(key)
@p[key] = value
end
def get key
@p[key]
end
def foo
do_something_with(get(:name))
...
end
end