在ruby中无需任何外部调用即可调用self

在ruby中无需任何外部调用即可调用self,ruby,Ruby,运行此代码将输出Hello。但这叫谁?我没有创建任何对象或调用任何类方法。类内部的self引用该类。如果您不在某个类中(例如在irb中),您将获得main。这里有一些例子 class Hello puts self end Ruby中的self基本上与Javascript中的类似。既然你在Hello类中,self=Hello。Self允许您访问当前对象,而且由于Ruby是一种面向对象的语言,类就是对象。在Ruby中,任何类/实例方法都可以通过在类内定义它们来归属于类。因此,类内的关键字s

运行此代码将输出
Hello
。但这叫谁?我没有创建任何对象或调用任何类方法。

类内部的
self
引用该类。如果您不在某个类中(例如在irb中),您将获得
main
。这里有一些例子

class Hello
  puts self
end


Ruby中的
self
基本上与Javascript中的
类似。既然你在Hello类中,self=Hello。Self允许您访问当前对象,而且由于Ruby是一种面向对象的语言,类就是对象。在Ruby中,任何类/实例方法都可以通过在类内定义它们来归属于类。因此,类内的关键字
self
等于该类。就像在Javascript中一样,如果您在任何上下文之外登录
this
,您将得到
window
,类似地,在Ruby中,将
self
置于上下文之外将得到
main

在Ruby中,类和模块定义是可执行代码


也请参阅为什么这是有用的

如果你来自C++背景,那就非常混乱。
> puts self
main
=> nil
> class String
>  puts self
> end
String
=> nil