Enumerable#detect возвращает первое значение массива, где блок оценивает значение true. Он имеет необязательный аргумент, который должен отвечать на call и в этом случае вызывается, возвращая его значение. Таким образом,
(1..10).detect(lambda{ "none" }){|i| i == 11} #=> "none"
Зачем нам нужна лямбда? Почему бы нам просто не передать значение по умолчанию, поскольку (в моих тестах) лямбда не может иметь никаких параметров? Вот так:
(1..10).detect("none"){|i| i == 11} #=> "none"