0
'bar'라는 하위 항목이있는 'foo'항목을 만들려고합니다. 예상 출력은 다음과 같습니다.블록, 바인딩 및 평가를 사용하여 항목의 계층 채우기
foo_item = Item @name="foo", @children=[<...>]
foo_item children = [Item @name="bar", @children=[]]
저는 바인딩 및 평가를 사용하고 있습니다. 이건 내 코드입니다 :
foo_item = Item @name="bar", @children=[<...>]
foo_item children = [Item @name="bar", @children=[<...>]]
동일한 입력을 감안할 때 :
foo_item = item('foo') do
item('bar')
end
아래의 실제 출력에
class Item
attr_accessor :name, :children
def initialize name
@name = name
@children = []
end
end
def item(item_name)
@item = Item.new(item_name)
if @context
@context.eval('@item.children') << @item
end
if block_given?
old_context = @context if @context
@context = binding
yield
if old_context
@context = old_context
else
@context = nil
end
end
@item
end
foo_item = item('foo') do
item('bar')
end
puts "foo_item = #{foo_item.inspect}"
puts "foo_item children = #{foo_item.children.inspect}"
의 foo_item
누구의 아이도 bar
항목입니다 bar
항목을 포함
위에서 예상 출력을 얻으려면 어떻게해야합니까?
나는이 작동하는지 볼 수 있지만, 할 수는 방법을 이해하지 못한다. 무슨 일이 일어나는지 설명해 주시겠습니까? – Anand
나는 더 명확 해지기를 바란다. –
네, 설명해 주셔서 감사합니다. – Anand