2013-09-03 6 views
8
verwendet wird

: Ich bin in Ruby on Rails, während Schienen Code durch Ich fand, dasswas attr_internal für

attr_internal :response_body 
    attr_internal :action_name 
    attr_internal :formats 

was ist es, was macht es? Warum haben sie attr_internal für den Aktionsversand für den Antworttext oder Aktionsnamen verwendet?

Antwort

0

Es deklariert ein Attribut Reader und Writer von einer intern benannten Instanzvariable unterstützt.

http://rubydoc.info/docs/rails/Module:attr_internal Blick in diese

Schauen Sie die Hauptdatei für es

https://github.com/rails/docrails/blob/master/activesupport/lib/active_support/core_ext/module/attr_internal.rb

def attr_internal_define(attr_name, type) 
    internal_name = attr_internal_ivar_name(attr_name).sub(/\[email protected]/, '') 
    class_eval do # class_eval is necessary on 1.9 or else the methods a made private 
    # use native attr_* methods as they are faster on some Ruby implementations 
    send("attr_#{type}", internal_name) 
    end 
    attr_name, internal_name = "#{attr_name}=", "#{internal_name}=" if type == :writer 
    alias_method attr_name, internal_name 
    remove_method internal_name 
end 


# use native attr_* methods as they are faster on some Ruby implementations 
    send("attr_#{type}", internal_name) 

hier die Tricks

+0

können Sie mir mehr erklären –

4

Es bemerkt werden sollte, dass Rails diese attr_internal bietet Namenskonflikt zu verhindern beim Unterklassifizieren. Wenn also die Instanzmethode attr_internal :variable read und write erstellt wird, wird auf letztere durch @_variable zugegriffen, so dass bei einer Unterklasse mit attr_accessor :variable keine Namenskollision möglich ist! Sehen Sie die doc für weitere Informationen