2012-02-15 20 views
2

私はいくつかの方法でクラスを持っている:オブジェクトのカスタムメソッドを呼び出すにはどうすればよいですか?

class Test 
    def initialize (age, height) 
    @age = age 
    @height = height 
    end 

    def older 
    @age = @age + 2 
    end 

    def shorter 
    @height = @height - 5 
    end 
end 

man = Test.new(40, 170) 
man.older 
man.shorter 

[...] 

は、私はいくつかに応じて、つまり、私はman.variablemethodのようなものを書きたいと.olderまたは.shorterのいずれかに.variablemethodを設定し、オブジェクトman上にカスタムメソッドを渡したいですその他の要因。どうやってやるの?

if condition then man.older」と呼ぶことができますが、特に選択する方法が20種類ある場合はifを使用したくありません。

答えて

3

あなたがsendを必要とするような音:

man.send(method_name) 

あなたも、あまりにも追加の引数を渡す、呼び出したいメソッドの名前を表す文字列や記号を渡すことができます。

def man.older_by_increment(years) 
    @age += years 
end 

man.send(:older_by_increment, 7) 

これも

class Man 

    # ... 

    private 

    def weight 
    @weight 
    end 
end 

Man.new.weight   # => private method `weight' called for #<Man:0x10bc956d8> (NoMethodError) 
Man.new.send(:weight) # => @weight 
+0

omgのいずれかから私的で保護されたメソッドを呼び出すことができます 私は欲しい! :)私はどのようにそれを逃しましたか?ありがとう! – darkwizdom

関連する問題