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

📄 02 - checking class or module membership.rb

📁 O Reilly Ruby Cookbook source code
💻 RB
字号:
def send_as_package(obj)  if obj.respond_to? :package    packaged = obj.package  else    if $DEBUG      $stderr.puts "Not sure how to package a #{obj.class}."      $stderr.puts 'Trying generic packager.'    end    package = Package.new(obj)  end  send(package)end#---def multiply_precisely(a, b)  if a.is_a? Float or b.is_a? Float    raise ArgumentError, "I can't do precise multiplication with floats."  end  a * bendmultiply_precisely(4, 5)                                       # => 20multiply_precisely(4.0, 5)# ArgumentError: I can't do precise multiplication with floats.#---def append_to_self(x)  unless x.respond_to? :<<    raise ArgumentError, "This object doesn't support the left-shift operator."  end  if x.is_a? Numeric    raise ArgumentError, 	"The left-shift operator for this object doesn't do an append."  end  x << xend   append_to_self('abc')                             # => "abcabc"append_to_self([1, 2, 3])                         # => [1, 2, 3, [...]]append_to_self({1 => 2})# ArgumentError: This object doesn't support the left-shift operator.append_to_self(5)# ArgumentError: The left-shift operator for this object doesn't do an append.5 << 5                                                # => 160 # That is, 5 * (2 ** 5)#---module ShiftMeansAppend  def <<(x)  endendclass String  include ShiftMeansAppendendclass Array  include ShiftMeansAppendenddef append_to_self(x)  unless x.is_a? ShiftMeansAppend    raise ArgumentError, "I can't trust this object's left-shift operator."  end  x << xend append_to_self 4# ArgumentError: I can't trust this object's left-shift operator.append_to_self '4'                            # => "44"#---

⌨️ 快捷键说明

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