我用这个类创建了一个带有添加值的proc
class MyBuilder
attr_reader :values
def initialize(something)
@something = something
@values = {}
end
def inner(name, &block)
@values[name] = block
end
end
字符串
我使用instance_exec函数来获取proc
require './my_builder'
class Out
def self.outer(sth, builder, &block)
builder.instance_exec(&block)
p "result", builder.values
end
end
型
当我测试的时候,这个工作得很好,这是正确的答案:oneone
Out.outer(:hello, builder) do
builder.inner(:one) { :oneone }
end
型
但这不工作,这是输入,只有我试图得到块do event :assign do ...
# datan status: {unassigned: 0, assigned: 1, resolved: 2} do
# event :assign do
# transition :unassigned => :assigned
# end
# end
def self.datan(name = nil, values = nil, **options, &block)
# options is {unassigned: 0, assigned: 1, resolved: 2}
# block should `do event :assign do ...`
Out.outer(:hello, builder) do
builder.inner(:one) { block }
end
型
1条答案
按热度按时间xzabzqsa1#
TL;DR
你要做的事情有很多错误,所以我不打算一行一行地解释它或调试你的代码。相反,我将简单地说你最大的两个问题是:
也就是说,这里有一个工作示例,其中匿名块在类外部定义,转换为proc,存储在示例变量中作为命名的proc集合,然后使用Proc#call按名称调用。它适用于Ruby 3.2.2,所以可以根据自己的用例进行调整。
foo.rb
中的示例代码字符串
foo.rb
输出示例型