⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 07 - delegating method calls to another object.rb

📁 O Reilly Ruby Cookbook source code
💻 RB
字号:
require 'delegate'# An integer represented as an ordinal number (1st, 2nd, 3rd...), as# opposed to a cardinal number (1, 2, 3...) Generated by the# DelegateClass to have all the methods of the Fixnum class.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  endend4.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                      # => 6OrdinalNumber.new(5) + 6                       # => 11 OrdinalNumber.new(5) + OrdinalNumber.new(6)     # => 11#---require 'forwardable'class AppendOnlyArray  extend Forwardable  def initialize    @array = []  end  def_delegator :@array, :<<enda = AppendOnlyArray.newa << 4a << 5a.size# NoMethodError: undefined method `size' for #<AppendOnlyArray:0xb7bf56f4 @array=[4, 5]>#---class RandomAccessHash   extend Forwardable  def initialize    @delegate_to = {}  end  def_delegators :@delegate_to, :[], "[]="endbalances_by_account_number = RandomAccessHash.new# Load balances from a database or something.balances_by_account_number["101240A"] = 412.60balances_by_account_number["104918J"] = 10339.94balances_by_account_number["108826N"] = 293.01#---balances_by_account_number["104918J"]                   # => 10339.94balances_by_account_number.each do |number, balance|  puts "I now know the balance for account #{number}: it's #{balance}"end# NoMethodError: undefined method `each' for #<RandomAccessHash:0xb7be7298>#---

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -