ruby – #with(对象)和块技巧
发布时间:2020-12-17 04:17:01 所属栏目:百科 来源:网络整理
导读:有一个常见的习惯用法,比如: def with clazz,block yield clazz clazzendwith Hash.new |hash| hash.merge!{:a = 1}end 有没有办法进一步定义#with有可能做到: with Hash.new |hash| merge!{:a = 1} end 甚至: with Hash.new do merge!{:a = 1}end ? UPD
有一个常见的习惯用法,比如:
def with clazz,&block yield clazz clazz end with Hash.new |hash| hash.merge!{:a => 1} end 有没有办法进一步定义#with有可能做到: with Hash.new |hash| merge!{:a => 1} end 甚至: with Hash.new do merge!{:a => 1} end ? UPDATE 后来我偶然发现了我正在寻找的东西(解决方案类似于已接受的解决方案): 更新2 它在https://github.com/kristianmandrup/sugar-high年被添加到sugar-high / dsl中 更新3 docille project on Github很好地利用了这个想法. 解决方法
如果你指的是Rails路由的方式,那么我认为你需要做这样的事情
def with(instance,&block) instance.instance_eval(&block) instance end with(Hash.new) do merge!({:a => 1}) merge!({:b => 1}) end 通过查看action_pack/lib/action_dispatch/routing/route_set中的draw方法,我就可以看到它在Rails源代码中的完成情况 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |