ruby-on-rails - ruby 真的是一种完全面向对象的语言吗?

标签 ruby-on-rails ruby ruby-on-rails-3

Ruby 是完全面向对象的语言。在 ruby​​ 中,一切都是对象,因此属于某个类。例如 5 属于 Object class

1.9.3p194 :001 > 5.class
 => Fixnum 
1.9.3p194 :002 > 5.class.superclass
 => Integer 
1.9.3p194 :003 > 5.class.superclass.superclass
 => Numeric 
1.9.3p194 :005 > 5.class.superclass.superclass.superclass
 => Object 
1.9.3p194 :006 > 5.class.superclass.superclass.superclass.superclass
 => BasicObject 
1.9.3p194 :007 > 5.class.superclass.superclass.superclass.superclass.superclass
 => nil 

因此,我们必须通过在类/对象名称前加上前缀来调用所有方法,如 Object_name#method_name 中所示。示例:

5.times{|i| puts i}

现在,Rails 有这些所谓的助手,如 stylesheet_link_tagjavascript_include_tagform_for 等,它们都遵循此 Object_name#method_name 语法,所以我猜它们只是普通函数。

所以我的问题是

  1. 这些 Rails 助手是什么?
  2. 如果它们只是起作用而不是 从任何类继承。这不与所提出的主张相矛盾吗 俗话说 - 在 ruby​​ 中,一切都是对象,没有原语。 例如,人们引用 5.+(6) 说即使是运算符也只是 简单的方法?

最佳答案

对于没有接收器调用的其他东西,请查看 Kernel 模块,其中定义了诸如 puts 之类的东西。由于该模块包含在 Object 中,因此它的方法随处可用。这与 - 恕我直言过度使用 - 声称一切都是对象的说法究竟有何矛盾?

关于ruby-on-rails - ruby 真的是一种完全面向对象的语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652023/

相关文章:

java - 使用 Apache Tomcat 运行精简?

ruby-on-rails - Rails - validates_each 只允许某些电子邮件?

ruby-on-rails - 大型 JSON 负载 Rails、Heroku、Unicorn 上的机架超时

ruby-on-rails - 两个或多个 Controller 共享相同的投票操作(只是模型类不同)——如何创建一个 mixin 以包含在所有 Controller 中?

mysql - Rails 4 从 has_one 关联访问表属性

ruby-on-rails - ruby-1.9.3-p448/gems/acts_as_paranoid-0.3.1/lib/acts_as_paranoid.rb :42:in `alias_method'

ruby - 范围错误 : bignum too big to convert into `long'

Ruby PostgreSQL 教程

ruby-on-rails - 通过关联属于_to

ruby-on-rails - Rails 3 - 如何构建包含大量数据的数据库表?