2016-08-03 3 views
0

Учитывая следующий YAML файл:Используя глобальную переменную рубиновый внутри YAML

--- 
foo: <%= $stdout %> 

Когда я пытаюсь Еврорадио этот YAML файл:

YAML.load(ERB.new(File.read(filename)).result) 

я получаю следующий результат:

{"foo"=>nil} 

Почему не $stdout правильное решение? Если я добавлю другой код ruby, он будет работать так, как ожидалось.

ответ

2

Посмотрите на то, что вы получаете, когда вы просто запустите Еврорадио:

ERB.new("foo: <%= $stdout %>").result 

Результат таков:

foo: #<IO:0x0056078694db38> 

Так foo будет установлен в nil, потому что # является комментарием характер в YAML.

+0

Интересно, есть ли способ получить foo для решения stdout через yaml/erb? –

+2

Не знаю. Обычно YAML предназначен для хранения данных, а не объектов. Возможно, попробуйте поместить строку stdout в ваш файл YAML и позже конвертировать эту строку в соответствующий объект. –

+0

Имеет смысл. Хотя вы можете сериализовать/десериализовать объекты в YAML, мы, вероятно, не можем делать то, что я пытаюсь сделать. –

Смежные вопросы