2016-06-20 3 views
4

Ich bin neu in den Rails und versuche herauszufinden, den Code, den ich gegeben habe. Was macht die Methode method in &Unit.method(:new)? Und was bedeutet &? Es gibt keine Methode method in Unit-Modell und wundern, warum es da sein kann. Und schließlich, ich denke, das Symbol :new erstellt ein neues Objekt Unit?Was macht die Methode `method` in` & Unit.method (: new) `?

class Unit 
    include ActiveModel::Model 

    attr_accessor :number 
end 


class Product 
    include ActiveModel::Model 
    ......... 
    ......... 
    def units=(values) 
    @units = values.map(&Unit.method(:new)) 
    end 
end 
+0

Willkommen bei Stackoverflow! Bitte geben Sie mehr Kontext an. – Vasfed

+0

@Vasfed, fertig .. – user6465508

Antwort

8

Das Verfahren method wird in der Klasse Object und somit auf alle Objekte definiert. Es nimmt als Argument den Namen einer Methode und gibt ein Method Objekt zurück, das verwendet werden kann, um die gegebene Methode zu reflektieren oder aufzurufen.

So Unit.method(:new) gibt Ihnen ein Method Objekt, das die Methode Unit.new darstellt.

Nun ist der unären Operator & nimmt ein Proc Objekt oder etwas, das zu einem Proc umgewandelt werden kann to_proc (das Method Objekte können) verwendet, und wandelt sie dann zu blockieren.

So &Unit.method(:new) erzeugt einen Block, der die Unit.new Methode aufruft, values.map(&Unit.method(:new)) gleichwertig zu gestalten:

values.map do |value| 
    Unit.new(value) 
end 
+0

perfekt! super klar – rick

Verwandte Themen