# encoding: UTF-8
something.rb
-файл
# encoding: ISO-8859-1
#използвам и този encoding и в тестовете иначе ми дава грешка
# encoding: UTF-8
alias
Module#alias_method
String#size
и String#length
super
не помагаalias
: alias :new_method :old_method
alias new_method old_method
(забележете, че това не са символи или низове, a идентификатори)
Module#alias_method
:
alias_method :new_method, :old_method
alias_method 'new_method', 'old_method'
def to_s
to_html
end
alias_method :to_html, :to_s
alias to_html to_s
alias
е ключова дума, докато alias_method
е обикновен метод от Module
alias
може да подавате като аргументи направо идентификатори на методи, например:
alias original_to_s to_s
ще направи нов синоним на to_s
под името original_to_s
alias_method original_to_s to_s
ще интерпретира original_to_s
и to_s
като имена на променливи
alias
това не ставаclass TranslationsController
LOCALES = [:en, :de, :fr, :es, :ja]
def completed_translations
@current_locale = $1 if current_action_name =~ /_(\w{2})$/
end
LOCALES.each do |locale|
alias_method "completed_translations_in_{locale}", completed_translations
end
end
super
когато можете и избягвайте alias_*
когато е възможно
super
работи и за методи, които са дошли от include
-ване на модули във вашия клас
alias
е ключова дума и подлежи на статичен синтактичен анализ, такива инструменти разпознават тези синоними
Module#alias_method
обикновено не се разпознава в тези случаи, понеже не може да ползвате статичен синтактичен анализ за целтаattr_reader
/attr_accessor
def inspect
@text
end
attr_reader :text
alias_method :inspect, :text
Object#freeze
Object#frozen?
module Entities
ENTITIES = {
'&' => '&',
'"' => '"',
'<' => '<',
'>' => '>',
}.freeze
ENTITY_PATTERN = /#{ENTITIES.keys.join('|')}/.freeze
def escape(text)
text.gsub ENTITY_PATTERN, ENTITIES
end
end
Object#taint
- маркира даден обект като "зацапан", т.е. потенциално опасен
Object#tainted?
ще ви върне true
, ако обект е маркиран като замърсен