带块的 ruby 哈希树
我该如何做到这一点:
class MyClass
tile 'some title'
collection do
node1 'node1'
node2 'node2'
another_collection do
node1 'node1'
node2 'node2'
end
end
end_node 'some text'
end
并产生以下内容:
MyClass.build #=>{:title=>'some title',:collection=>{:node1=>'node1',:node2=>'node2',:another_collection=>{:node1=>'node1',:node2=>'node2'}},:end_node=>'some text'}
我试图制作简单的 DSL 并构建哈希树。我确信这可以通过 method_missing 和 instance_eval 来完成,但我现在不知道如何构建该逻辑。
感谢您的帮助
how can I do this:
class MyClass
tile 'some title'
collection do
node1 'node1'
node2 'node2'
another_collection do
node1 'node1'
node2 'node2'
end
end
end_node 'some text'
end
and produce following:
MyClass.build #=>{:title=>'some title',:collection=>{:node1=>'node1',:node2=>'node2',:another_collection=>{:node1=>'node1',:node2=>'node2'}},:end_node=>'some text'}
What i was trying is to make simple DSL and build hash tree. I'm sure that can be done with method_missing and instance_eval, but i don't now how to build that logic.
Thanks for help
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在您的
method_missing
中,您应该检查是否给出了一个块,如果是,则用它递归调用 main 方法:In your
method_missing
, you should check if a block is given, and, if so, recursively call the main method with it: