Ruby: вызывать список методов, пока один из них не вернет true - PullRequest
2 голосов
/ 10 марта 2010

Есть ли красивый способ сделать серию вызовов методов в ruby, пока один не вернет true?

Это была моя первая мысль, но я думал, что может быть лучше:

if method_one
elsif method_two
elsif method_three
else
  puts "none worked"
end

Ответы [ 3 ]

5 голосов
/ 10 марта 2010

Есть несколько вариантов Ruby-ish.Один интересный:

method_one || method_two || method_three || Proc.new { puts "none worked" }.call

или

method_one || method_two || method_three || lambda { puts "none worked" }.call
5 голосов
/ 10 марта 2010

Вы можете использовать Enumerable # any? а также.

[ :m1, :m2, :m3 ].any?{ |method| object.send( method )} || "None Worked"
4 голосов
/ 10 марта 2010

Попробуйте:

[:m1, :m2, :m3, ...].find{ |m| send(m) } != nil || "none worked"

Возвращает true, если один из методов возвращает true, в противном случае возвращает none worked.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...