我有一个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/

10-11 19:24
查看更多