単純なオブジェクトがあるとしましょう。受け入れたいattr_accessor属性の s があり、オブジェクトのハッシュで初期化できるようにしたい:
class Example
attr_accessor :foo, :bar
def initialize( attributes = {} )
attributes.each do |k,v|
...
end
end
end
send上記の attributes.each ブロックでは、次のように を使用する方がよいでしょうか。
send "#{k}=", v
またはinstance_variable_set次のように使用します。
instance_variable_set "@#{k}".to_sym, v
...またはまったく別のことをするために?
私が考えることができる違いは次のとおりです。
sendある時点でいずれかをattr_accessorsセッターメソッドに置き換えた場合、使用はより一貫性があります。予期しない値が渡された場合、使用
sendすると発生しますNoMethodError
send私はこれらの理由で傾いています - 私は実際にNoMethodErrorは、偽の初期データのために提起される可能性が好きです。ただし、ここで見落としている他の要因、特にパフォーマンスとセキュリティの考慮事項はありますか?
洞察に感謝します。ありがとう!