2013-03-03 5 views
1

Я пытаюсь принять аргумент блока в методе и повернуть содержимое (массив символов) и превратить его в массив. Например:Ruby Block to Array

def sequence(&block) 
    # ? 
end 

sequence do 
    :foo, 
    :bar, 
    :foobar 
end # => [:foo, :bar, :foobar] 

Я знаю, что это было бы легче просто массив в качестве аргумента в методе sequence, но я стараюсь, чтобы остаться в соответствии с другим методом.

ответ

3

Этот синтаксис не допускается в Ruby, поэтому, к сожалению, это невозможно, поскольку код даже не пройдет мимо анализатора.

0

Хорошо, не отвечая на точный вопрос, и я думаю, вы и dirk знаете это, но ...

В случае, если кто хочет Array в качестве параметра, и их поиск привел их сюда, Ruby действительно есть Основная особенность, которая делает что-то подобное для вас:

def f *x 
    x 
end 

p f :foo, 
    :bar, 
    :foobar 

# => [:foo, :bar, :foobar] 
0

Хотя синтаксис вы предложили не передавать анализатор, есть некоторые хитрости:

def sequence(&block) 
    yield 
end 

sequence do [ 
    :foo, 
    :bar, 
    :foobar 
] end # => [:foo, :bar, :foobar] 

sequence do _= 
    :foo, 
    :bar, 
    :foobar 
end # => [:foo, :bar, :foobar]