簡體   English   中英

為什么括號會影響哈希?

[英]Why do parentheses affect hashes?

當我使用respond_with並傳遞一個文字哈希時,它給了我錯誤:

syntax error, unexpected tASSOC, expecting '}'
`respond_with {:status => "Not found"}`

但是,當我將括號中的文字哈希括起來時,如下所示:

respond_with({:status => "Not found"})

該功能順利運行。 為什么括號會有所作為? 哈希是一個封閉的呼叫嗎?

調用方法時,方法名稱后面的左大括號將被解釋為塊的開頭。 這優先於作為哈希的解釋。 解決問題的一種方法是使用括號將解釋強制為方法參數。 作為示例,請注意這兩個方法調用的含義不同:

# interpreted as a block
[:a, :b, :c].each { |x| puts x }

# interpreted as a hash
{:a => :b}.merge({:c => :d}) 

另一種方法是擺脫大括號,因為你總是可以跳過方法的最后一個參數的括號。 Ruby非常“聰明”,可以將參數列表末尾看起來像關聯列表的所有內容解釋為單個哈希。 請看一下這個例子:

def foo(a, b)
  puts a.inspect
  puts b.inspect
end

foo "hello", :this => "is", :a => "hash"
# prints this:
# "hello"
# {:this=>"is", :a=>"hash"}

暫無
暫無

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

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