新手问题 Ruby 方法的默认调用对象

thxagain · 2016年12月06日 · 最后由 thxagain 回复于 2016年12月06日 · 1436 次阅读
open('test.jpg') { |f|
  while record = f.read(256)

  end
}

我注意到没有用open这个方法前面没有任何对象,想请问下是哪个对象调用了open这个方法呢?是Object么?

open("/home/test.png")  { |f|
   puts f
   puts f.class
 }
#<File:0x00000002114200>
File

方法没有调用对象时,默认为当前环境的 self。

irb(main):001:0> self
main
irb(main):002:0> self.class
Object < BasicObject

#2 楼 @541991a 要深揪的话其实是属于 Kernel 的

> self.class.ancestors
 => [Object, Kernel, BasicObject]

无文档无真相

因为 Object 继承 Kernel 所以 Object 也能调用这个方法

#3 楼 @flemon1986 了解了

看文档是说 默认把 Kernel 这个 module include 进来了

感谢楼上所有同学

需要 登录 后方可回复, 如果你还没有账号请 注册新账号