2017-08-19 7 views
0

Patchen Ich erhalte die den FehlerEmpfangen nicht definierte Methode Fehler beim Affen

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

, wenn Sie den folgenden Code

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]) 

Jede Hilfe läuft diese Festsetzung sehr geschätzt werden würde.

+0

keinen Parameter definieren und 'self' in Ihrer Methode verwenden, dann können Sie rufen' [1,2, 3] .my_uniq' –

Antwort

1

Wenn Sie eine Klassenmethode schreiben möchten, können Sie es mit self dh def self.my_uniq definieren müssen:

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 

Für Klassenmethoden, die Klasse selbst ist der Empfänger:

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

Wenn Sie eine Instanzmethode schreiben möchten, geben Sie self und das Argument

aus

Zum Beispiel Methoden, eine Instanz dieser Klasse ist der Empfänger:

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

Danke für die Antwort. Ich werde etwas mehr über den Unterschied zwischen Klassenmethoden/Instanzmethoden lesen. Ich weiß es zu schätzen, dass Sie mich in die richtige Richtung weisen. Prost. – Yitzhak

Verwandte Themen