[英]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.