为什么类内部而方法外部的行可以在Ruby中执行?
这是一种设计理念吗?例如,如果我有一个类“Greeter”,定义如下:为什么类内部而方法外部的行可以在Ruby中执行?,ruby,oop,Ruby,Oop,这是一种设计理念吗?例如,如果我有一个类“Greeter”,定义如下: 1: class Greeter 2: def say_hello 3: puts "Hello" 4: end 5: 6: puts "Goodbye!" 7: 8: end 执行文件时: $ ruby greeter.rb Goodbye! $ 在其他语言(如Java、PHP)中,我会得到一个关于第6行无效的错误。Ruby的方式与我对OOP的了解有所不同,还是我误解了OOP的概念?我不明白这与
1: class Greeter
2: def say_hello
3: puts "Hello"
4: end
5:
6: puts "Goodbye!"
7:
8: end
执行文件时:
$ ruby greeter.rb
Goodbye!
$
在其他语言(如Java、PHP)中,我会得到一个关于第6行无效的错误。Ruby的方式与我对OOP的了解有所不同,还是我误解了OOP的概念?我不明白这与OOP有什么关系。OOP是关于消息发送的,而
放上“再见!”
是消息发送。它将带有单个参数“再见!”的消息:put
发送到self
事实上,不是OOP的是第2行,您似乎没有问题,因为第2行不是消息发送
让我们从相反的角度来看:如果没有执行类主体的内容,那么您将如何定义方法?显然,执行第2行并不奇怪,那么为什么要对第6行进行任何不同的处理呢?这将是非常不一致的 这不是因为它是面向对象的,而是因为Ruby是如何实现OO的。你在那里定义的“类”…它是一个对象。它是“类”类型的对象。对
put
的调用被视为“类宏”。它运行的范围是类的实例(不是Greeter的实例)。由于Ruby在解释类定义时会创建类定义的实例(也就是类对象),所以在运行时会立即运行您的语句
如果您对ruby如何与动态事物一起工作感兴趣,那么您可能也会非常喜欢元编程ruby 类定义内部的代码,但任何方法外部的代码都是Ruby中非常强大的功能,特别是考虑到它的动态特性。它实际上类似于在其他语言中创建静态构造函数。基本上,这是针对应该在使用类上的方法之前执行的代码。您可以使用它在运行时实际操作类。看看attr_accessor之类的方法,看看为什么它如此有用。这是一种预期的设计哲学。它来自:
有没有比类主体更好的地方来实现和调用类定义逻辑 另一种解释是:
class Greeter
您已经执行了一个类语句。它定义了一个类,而您就在该类中
2: def say_hello
3: puts "Hello"
4: end
在类内部执行DEFA代码。这段代码创建了一个方法
6: puts "Goodbye!"
当执行另一个代码(puts)时,您在类迎宾器内。此代码已打印完毕,再见!在控制台中。这正是我的想法:)