2011-03-11 42 views
8
> a = %w(a b c) 
=> ["a", "b", "c"] 
> a.select!{|e| !e.nil?} 
NoMethodError: undefined method `select!' for ["a", "b", "c"]:Array 
    from (irb):2 

ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.5.0], MBARI 0x6770, Ruby Enterprise Edition 2010.02 

該文檔說有一種方法稱爲選擇!在陣列中。紅寶石有陣列方法選擇!或不?

http://www.ruby-doc.org/core/classes/Array.html#M000252

+0

下面它不是在1.8.7,但你可以使用delete_if /拒絕!反邏輯(甚至通過重新打開數組類來實現選擇) – nruth 2011-03-11 17:37:59

+0

順便說一句,REE的新版本2011.03包含幾個重要的錯誤和安全修復程序。 – 2011-03-11 17:42:08

回答

7

您鏈接到是對Ruby 1.9.2的文檔。 Ruby 1.8.7 Arrays沒有select!

編輯:作爲未來的參考資料,您可以查看documentation,瞭解不同版本的Ruby。

+0

它不。 1.8.7的文檔位於:http://ruby-doc.org/core-1.8.7/ – 2011-03-11 17:34:52

+0

謝謝。我會更新我的答案。 – theIV 2011-03-11 17:37:02

1

該代碼適用於我,但我運行的是Ruby 1.9.2(它與您鏈接的文檔的版本相同)。

這裏是1.8.7 documentation。注意只有select可用,而不是select!

9

的Ruby 1.8.7 確實Array#reject!,雖然:

>> a = [1, 2, nil] 
=> [1, 2, nil] 
>> a.reject! &:nil? 
=> [1, 2] 
+0

我認爲這應該是公認的答案,如果@納達爾的原始問題真的是「我如何得到這個工作」。我也認爲重要的是要澄清不同的位置,以獲取各種版本的Ruby的文檔,這些文檔現在在其生態系統中「浮動」。 – theIV 2011-03-11 17:44:14

2

Array#select!中引入Ruby 1.9.2。

爲了在舊的Ruby版本中獲得它,並停止擔心哪些版本的Ruby具有哪些方法,您可以使用require "backports/1.9.2/array/select"

您也可以使用Array#reject!或組合#replace#select