2

我有以下课程:

class Foo
  def [](*files)
  end

  def read(file)
  end
end

我想这样调用函数:

bar = Foo.new
bar['todo.txt'].read

有没有办法使这种语法成为可能?

4

2 回答 2

2

If you want to be able to chain those methods, I believe you will have to return self from [].

class Foo
  attr_accessor :files
  def [](*files)
    @files = files
    self
  end

  def read
    p @files
  end
end
于 2013-06-28T23:40:48.790 回答
2

使用实例变量在实例方法之间共享上下文。

class Foo
  def [](*files)
    @files = files
    self
  end
  def read(file = nil)
    if file
      File.read(file)
    else
      @files.map{|file| File.read(file)}.join
    end
  end
end
于 2013-06-28T23:37:49.870 回答