调用具有多个参数和一个块的方法的ruby语法是什么?

调用具有多个参数和一个块的方法的ruby语法是什么?,ruby,syntax,dsl,ruby-2.0,Ruby,Syntax,Dsl,Ruby 2.0,Ruby不喜欢这样: item (:name, :text) { label('Name') } def item(name, type, &block) i = QbeItemBuilder.new(@ds, name, QbeType.gettype(type)) i.instance_exec &block end 我不知道为什么。我正在尝试创建一个DSL。“item”方法如下所示: item (:name, :text) { label('Name'

Ruby不喜欢这样:

item (:name, :text) {
  label('Name')
}
def item(name, type, &block) 
  i = QbeItemBuilder.new(@ds, name, QbeType.gettype(type))
  i.instance_exec &block
end
我不知道为什么。我正在尝试创建一个DSL。“item”方法如下所示:

item (:name, :text) {
  label('Name')
}
def item(name, type, &block) 
  i = QbeItemBuilder.new(@ds, name, QbeType.gettype(type))
  i.instance_exec &block
end
获取项的名称、项的类型和块。构造项目生成器,并在其上下文中执行块

不管我是否需要使用instance_exec(我认为我不需要-它可以填充在初始化器中),我得到以下结果:

SyntaxError (ds_name.ds:5: syntax error, unexpected ',', expecting ')'
  item (:name, :text) {
              ^

如何使用多个参数和一个块调用方法?鲁比认为我在做什么

删除
项(:name,:text)中
)前面的空格{

删除
项(:name,:text)中
)前面的空格{

括号前的空格导致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
您提供块的方式在语法上是有效的,但是当块与方法调用不在同一行时,通常最好使用
do…end
语法

因此,要回答您的问题,您可以使用:

item(:name, :text) { label('Name') }
或:


括号前的空格导致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
您提供块的方式在语法上是有效的,但是当块与方法调用不在同一行时,通常最好使用
do…end
语法

因此,要回答您的问题,您可以使用:

item(:name, :text) { label('Name') }
或:


不应该在括号和参数之间留空格。不应该在括号和参数之间留空格。啊!啊!它试图计算括号,但作为表达式!谢谢,伙计。啊!啊!它试图计算括号,但作为表达式!谢谢,伙计。