2017-08-19 41 views
0

運行下面的代碼接收未定義的方法錯誤,當猴子修補

class Array 
    def my_uniq(array) 
    new_arr = [] 

    array.each do |i| 
     if !new_arr.include?(i) 
     new_arr << i 
     end 
    end 

    return new_arr 
    end 
end 

test = Array.my_uniq([1,2,3]) 

當任何解決這個幫助會非常讚賞,我發現了錯誤

`<main>': undefined method `my_uniq' for Array:Class (NoMethodError) 

+0

沒有定義參數,並在你的方法,你可以調用'[1,2使用'self', 3] .my_uniq' –

回答

1

如果你想要寫一個類方法,你必須用selfdef self.my_uniq定義它:

class Array 
    def self.my_uniq(array) 
    array.each_with_object([]) do |element, new_arr| 
     new_arr << element unless new_arr.include?(element) 
    end 
    end 
end 

類方法,類本身是接收器:

Array.my_uniq([1, 1, 2, 3, 3, 1]) 
#=> [1, 2, 3] 

如果你想要寫一個實例方法,省略self和參數:

class Array 
    def my_uniq 
    each_with_object([]) do |element, new_arr| 
     new_arr << element unless new_arr.include?(element) 
    end 
    end 
end 

對於實例方法,這個類的一個實例是接收器:

[1, 1, 2, 3, 3, 1].my_uniq 
#=> [1, 2, 3] 
+0

感謝您的響應。我會更多地閱讀關於類方法/實例方法之間的區別。我感謝你指點我正確的方向。乾杯。 – Yitzhak