簡體   English   中英

調用具有多個參數和一個塊的方法的紅寶石語法是什么?

[英]Whats the ruby syntax for calling a method with multiple parameters and a block?

Ruby不喜歡這樣:

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

而且我不知道為什么。 我正在嘗試創建DSL。 “ item”方法如下所示:

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) {
              ^

如何調用帶有多個參數和一個塊的方法? 紅寶石認為我要做什么?

括號前的空格導致ruby在調用方法之前將(:name, :text)作為單個參數求值(: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') }

要么:

item(:name, :text) do
  label('Name')
end

刪除( item (:name, :text) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM