我正在第一次學習Ruby,並且發現在使用組合比較運算符(或太空船運算符)時,在運算符前放置的語句將運行,但之後放置的語句會導致錯誤。我用分號玩弄了這個。爲什麼組合比較失敗時,在塊語句中放置了一些東西?
list.sort { |item1, item2| puts "foo"; item1 <=> item2 }
的作品,但
list.sort { |item1, item2| item1 <=> item2; puts "foo" }
失敗。
我試圖在塊語句之外,這個問題消失了。然後我嘗試了多行塊語句,如
list.sort do |item1, item2|
item1 <=> item2
puts "foo"
end
並且它與單行塊有相同的問題。
有誰知道發生了什麼事?
我想到的最好的解釋是,< =>使用類似splat的參數功能,並在第2項之後的文本中吸吮,但我不知道爲什麼它會在塊聲明中發生,但不在或者爲什麼它忽略了分號和換行符。粗略的搜索沒有發現任何有用的文檔。
編輯:我使用Codeacadamy.com的編譯器時得到的錯誤是「字符串與字符串比較失敗。」
EDIT2:
ruby -e '
> list = ["one", "two", "three"]
> list.sort { |f, s| f <=> s; puts "foo" }
> puts list
> '
foo
-e:3:in `sort': comparison of String with String failed (ArgumentError)
from -e:3:in `<main>'
你有什麼錯誤?正如你所說的那樣失敗..我們需要看看你的樣本數據。 –