什么是"if/unless"等等

use*_*919 5 ruby oop irb

考虑到Ruby中的所有东西都是一个对象,我们可以打开irb并输入类似的东西4.class"Text".class查看一个对象是哪个类,为什么这样做if.class并且unless.class没有给出返回值?

Jör*_*tag 10

考虑到Ruby中的所有内容都是一个对象

这取决于你对" 对象 "和每个" 事物 "的定义." 对象 "可以表示" 可以由程序操纵的实体 "(我将从现在开始称之为对象),或" 作为对象系统成员的值 "(我Object将从现在开始调用).

在Ruby中,程序可以操作的所有东西(即每个对象)也是一个类Object,即类的实例.例如,这与Java不同,其中基元可以由程序操纵(即,在该意义上的对象),但不是Objects.在Ruby中,这种区别并不存在:每个对象都是一个Object,每个对象都是Object一个对象.

但是,语言中有些东西不能被程序操纵,也不是类的实例,即它们既不是对象也不Object是s.例如,这些是方法,变量,语法,参数列表,参数列表,关键字.

注意:您可以使用Ruby的反射API为您提供表示方法或参数列表的对象,但该对象只是一个代理,它不是真实的.

所以,当我们说" 一切都是一个对象 "时,我们真正的意思是"每个对象都是一个Object",即程序可以操作的所有东西也是对象系统的成员,或者换句话说,那里没有对象系统之外的值(与Java中的原语不同).我们并不是说该语言中存在的所有内容也可以在程序运行时进行操作.

为什么这样做if.classunless.class没有给予回报价值

嗯,首先,即使如果 if 一个对象,那些不这样做,你认为他们这样做:当你说像foo在Ruby中,这意味着无论是"取消引用局部变量foo"或"调用方法fooself作为隐含接收器和没有参数列表".所以,

if.class
Run Code Online (Sandbox Code Playgroud)

将为您提供局部变量引用的对象if的类或方法返回的对象的类if,但不会if自己的类.

但是if控制流关键字不是一个对象,无论如何(既不是对象也不是Object),因为关键字和控制流不是Ruby中的对象.

Matz和David Flanagan撰写的The Ruby Programming Language一书中,它在第2页说:

每个值都是一个对象

注意,它并不是说每件事,只说每一个.

另请参阅问题变量是ruby中的对象吗?