2012-09-28 44 views
0

我曾問過類似的問題早:reference to a method?參考對象的方法上

,但現在我想弄清楚如何使用此代碼做到這一點:

arr0 = [1,2,3] 
arr1 = [2,3,4,5] 
arr1.reject! {|x| 
    arr0.include? x 
} 

顯然{|x| arr0.include? x}可簡化爲arr0.include?。但是我不知道如何獲得這個方法的參考。

編輯:我不感興趣如何使用簡單的語法減去Ruby中的數組。我正在尋找一種方法來獲取對方法的引用。

+3

爲什麼不只是做'ARR1 - arr0'? – seph

回答

1

在Ruby中每個對象都有一個method方法:

m = [1,2,3].method(:include?) #reference to the include? method of this array. 
p m.call(1) #call the method with an argument ; => true 
1

你可以做到這一點與

arr1 - arr0 

,你不能做到這一點與椒鹽捲餅冒號,因爲你有一個說法。

+0

是的,我可以用這個語法來做到這一點。我的問題是如何獲得我發佈的示例代碼中的方法。 – akonsu

+0

arr1 - = arr0自拒絕!修改接收器。 – 2012-09-28 15:35:27

+0

:)謝謝。我不是故意說我想要使用椒鹽脆餅列。 – akonsu

6
arr1.reject!(&arr0.method(:include?)) 
+0

+1不知道你可以用&符來做到這一點。 – steenslag

+0

@steenslag:*參數列表中的和號意味着「將此塊封裝在Proc中」。 *參數列表中的&符號意味着「將此Proc'解包到一個塊中(並且首先調用'to_proc',如果它不是塊的話)」。 'Method'實現'to_proc',就像'Symbol'一樣,所以它的工作原理與'Symbol'完全一樣。 –

1
arr0 = [1,2,3] 
arr1 = [2,3,4,5] 

m = arr0.method(:include?) 
arr1.reject!(&m) #=> [4, 5]