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