我有一个ruby代码,目前看起来是这样的:
grades.sum{|g| g.grade * g.weight}
对于用户维护的DSL,我希望实现如下内容:
grades.sum('grade' * 'weight')
这可能吗?
最佳答案
不,除非您monkeypatch类添加应用程序逻辑(请不要这样做)但是,如果你玩一点String
,这甚至看起来更好,是可能的:
grades.sum { grade * weight }
例如,假设
instance_eval
是一个数组:module Enumerable
def sum(&block)
inject(0) { |acc, x| acc + x.instance_eval(&block) }
end
end
关于ruby - Ruby DSL的类似块的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13210291/