Ruby Получить массив из объектов, возвращаемых в блок

StackOverflow https://stackoverflow.com/questions/3859506

  •  27-09-2019
  •  | 
  •  

Вопрос

В Ruby, в определенные случаи (Ruby / Gosu / Texplay) I'V видел код, как используется следующее:

image.paint {
    circle 20, 20
    pixel 10, 10
}

Можно ли мне написать аналогичную функцию, которую можно использовать так?:

my_function {
    "one"
    "two"
    "three"
}

Это вернутся и массив: [«один», «два», «три»

PS Эта функция не только для генерации массивов, и мне не задается вопросом о методах, чтобы сделать это, все, что мне нужно знать о синтаксисе. Спасибо заранее, ell.

Это было полезно?

Решение

TexPlay выглядит красиво, как вы его найдете? :)

Я не могу думать о том, как вы хотите, извините. Но если вы префиксируете каждую строку с _ это легко:

function {
    _"one"
    _"two"
    _"three"
}

#=> ["one", "two", "three"]

Где:

def function(&block)
    Object.new.tap do |s| 
        s.instance_eval do            
            def _(var)
                @val ||= []
                @val << var
            end
        end
        s.instance_eval(&block)
     end.instance_variable_get(:@val)
end    
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top