2011-06-23 5 views
0

継承されたフォーマットメソッドを使用して16進文字列をフォーマットしようとしています。私は少しRuby-noobです。どんな助けもありがとうございます。ここでRuby:継承を使用した動的セッター

class Bar 
    def alter_the_variable attribute_name 
    attribute = method(attribute_name) 
    formatted = "%.4x" % attribute.call.hex 
    puts formatted # => 00f3 
    attribute = formatted # What I "want" to be able to do, but 
          # doesn't work because attribute is a local variable 

    #attribute.owner.send(:h=, formatted) # Doesn't work either, gives: 
              # in `send': undefined method `h=' for Foo:Class (NoMethodError) 
    end 
end 

class Foo < Bar 
    def initialize 
    @h = "f3" 
    end 

    def h 
    @h 
    end 

    def h= val 
    @h = val 
    end 
end 

f = Foo.new 
puts f.h # => f3 
f.alter_the_variable :h 
puts f.h # => f3 

答えて

1

は、あなたがやりたいことやるための一つの方法です:

def alter_the_variable attribute_name 
    current_value = send(attribute_name) 
    formatted_value = "%.4x" % current_value.hex 
    send (attribute_name.to_s+'=').to_sym, formatted_value 
end 
+0

私はsend' 'の前で私の' attribute.owner'はFooのインスタンス、Fooのクラスにいない言及していたことを推測します。ありがとうございます。あなたは学者と紳士です。 – roris

関連する問題