ruby-Basics: yield 0

Posted by fwoeck
on Thursday, December 04
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"]
Comments

Leave a response

Comment