我有以下课程:
class Foo
def [](*files)
end
def read(file)
end
end
我想把这个函数称为:
bar = Foo.new
bar['todo.txt'].read
有没有办法让这种语法成为可能?
答案 0 :(得分: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
答案 1 :(得分:2)
如果您希望能够将这些方法链接起来,我相信您必须从self
返回[]
。
class Foo
attr_accessor :files
def [](*files)
@files = files
self
end
def read
p @files
end
end