1 2 3 |
def filter arr arr.select {|f| yield f} end |
Was macht das?
yield erwartet einen Block. Der Aufruf muss also generell lauten:
x = filter(<array>) {|x| fn(x)}
Damit lassen sich verschiedene Filter bauen:
>> filter([1,2,3,4,5,6]) {|y| y % 2 == 0}
=> [2, 4, 6]
>> filter(["abc","def","ghi"]) {|y| y =~ /e/}
=> ["def"]
Bemerkenswert: die Klammern dürfen nicht entfallen:
>> filter ["abc","def","ghi"] {|y| y =~ /e/}
SyntaxError: compile error
Was, wenn ich das “y =~…” in eine eigene Funktion kleiden wollte?
1 2 3 |
def iseish? x x =~ /e/ end |
>> iseish?("hu")
=> nil
>> iseish?("heu")
=> 1
>> filter(["abc","def","ghi"], &method(:iseish?))
=> ["def"]