Ruby/Class/DelegateClass
Материал из Wiki.crossplatform.ru
Версия от 17:55, 13 сентября 2010; ViGOur (Обсуждение | вклад)
Create HexNumber
require "delegate" class HexNumber < DelegateClass(Fixnum) # The string representations of this class are hexadecimal numbers. def to_s sign = self < 0 ? "-" : "" hex = abs.to_s(16) "#{sign}0x#{hex}" end def inspect to_s end end puts HexNumber.new(10) * 2 # => 20 puts HexNumber.new(10) + HexNumber.new(200) # => 210
Delegating Method Calls to Another Object
require "delegate" class OrdinalNumber < DelegateClass(Fixnum) def to_s delegate_s = __getobj__.to_s check = abs if check == 11 or check == 12 suffix = "th" else case check % 10 when 1 then suffix = "st" when 2 then suffix = "nd" else suffix = "th" end end delegate_s + suffix end end 4.to_s # => "4" OrdinalNumber.new(4).to_s # => "4th" OrdinalNumber.new(102).to_s # => "102nd" OrdinalNumber.new(11).to_s # => "11th" OrdinalNumber.new(-21).to_s # => "-21st" OrdinalNumber.new(5).succ # => 6 OrdinalNumber.new(5) + 6 # => 11 OrdinalNumber.new(5) + OrdinalNumber.new(6) # => 11