我听说" Ruby是纯粹的OOP语言"并且" Ruby中的所有东西都是一个对象。"如果是这样,为什么我们有这两种情况?
puts
和print
等函数可以处理字符串对象。根据OOP规则,对象的方法是应该操纵它的状态。任何人都可以解释这两种情况如何适应短语" Ruby是纯粹的OOP语言"?
答案 0 :(得分:6)
puts
和print
不对参数做任何事情(顺便说一下,这些参数不一定是字符串)。他们修改IO流,这就是定义这些方法的地方(尽管Kernel
中的语法糖使他们几乎可以从任何地方访问)。
如果没有显式的类体,则代码将在main
对象的上下文中解释,该对象属于Object
类。
答案 1 :(得分:2)
puts()是IO类中的一个方法。见http://www.ruby-doc.org/core-2.1.3/IO.html#method-i-puts
IRB是一个模块,所以它也是一个对象。见http://ruby-doc.com/docs/ProgrammingRuby/html/irb.html
答案 2 :(得分:1)
“纯OOP语言”也没有听起来那么严格。它更多地是关于它的实现方式以及最终的所有内容都在对象内部进行评估。
据说你可以做很多功能性的事情,包括传递函数(lambdas),currying和懒惰的评估。
此presentation和此example中也包含一些示例。
答案 3 :(得分:0)
您定义的方法本身就是一个对象,因为所有都是一个对象。
2.1.2 :034 > def my_method
2.1.2 :035?> puts "hi"
2.1.2 :036?> end
=> :my_method
2.1.2 :037 > x = method(:my_method)
=> #<Method: Object#my_method>
2.1.2 :038 > x.call
hi
=> nil
2.1.2 :039 > x.class
=> Method
puts
在模块Kernel
上定义,模块Object
由IO
继承。{{1}}。它不会操纵字符串的状态,它会读取字符串并将其打印到输出流。