优雅的Ruby读书笔记:使用内置的类型转换协议

使用内置的类型转换协议 是程序处理输入的方法之一,是一种更优雅的防御性编程。

File.open 会接受一个 filename 的参数。虽然没有明确说明,但明显期望参数 filename 是一个 string 类型。

class EmacsConfigFile
  attr_reader :filename

  def initialize
    @filename = '/home/config'
  end

  def to_path
    @filename
  end
end

emacs_config = EmacsConfigFile.new

File.open 会在参数对象上调用 #to_path 方法。这样 File.open(emasc_config)File.open(emasc_config.filename) 都是可以正常工作的。

ruby 内置的类型转换协议很像 golang 的 interface。