Ruby 不喜欢这样:
item (:name, :text) {
label('Name')
}
我也不知道为什么。我正在尝试创建 DSL。 “项目”方法如下所示:
def item(name, type, &block)
i = QbeItemBuilder.new(@ds, name, QbeType.gettype(type))
i.instance_exec &block
end
为项目取一个名字,项目的类型,和一个方 block 。构造一个项目生成器,并在其上下文中执行该 block 。
不管我是否需要使用 instance_exec(我想我不需要——它可以塞进初始化器),我得到这个:
SyntaxError (ds_name.ds:5: syntax error, unexpected ',', expecting ')'
item (:name, :text) {
^
如何使用多个参数和一个 block 调用方法? ruby 认为我想做什么?
最佳答案
括号前的空格导致 ruby 在调用导致语法错误的方法之前将 (:name, :text)
评估为单个参数。查看这些示例以进行说明:
puts 1 # equivalent to puts(1) - valid
puts (1) # equivalent to puts((1)) - valid
puts (1..2) # equivalent to puts((1..2)) - valid
puts (1, 2) # equivalent to puts((1, 2)) - syntax error
puts(1, 2) # valid
您提供 block 的方式在语法上是有效的,但是当 block 与方法调用不在同一行时,通常最好使用 do ... end
语法。
因此,要回答您的问题,您可以使用:
item(:name, :text) { label('Name') }
或:
item(:name, :text) do
label('Name')
end
关于ruby - 调用具有多个参数和 block 的方法的 ruby 语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19802419/