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