27 lines
894 B
Markdown
27 lines
894 B
Markdown
|
# Lösung: Methoden dynamisch aufrufen
|
||
|
|
||
|
<div style="border: 1px solid grey;"><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></div>```ruby
|
||
|
def crazy_caller(obj)
|
||
|
# Methoden suchen
|
||
|
obj.methods.each do |m|
|
||
|
# m enthält ein Symbol mit dem Namen der Methode,
|
||
|
# wir wollen aber das Methoden-Objekt
|
||
|
method = obj.method(m)
|
||
|
|
||
|
begin
|
||
|
# Methode aufrufen, wenn sie keinen Parameter hat
|
||
|
method.call {} if method.arity == 0
|
||
|
rescue
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
class Test
|
||
|
def m1; puts 'm1'; end
|
||
|
def m2; puts 'm2'; end
|
||
|
def m3(a); puts 'm3'; end
|
||
|
def m4(a, b); puts 'm4'; end
|
||
|
end
|
||
|
|
||
|
crazy_caller(Test.new)
|
||
|
```
|