加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于Ruby中OBJECTS的问题

发布时间:2020-12-17 02:16:48 所属栏目:百科 来源:网络整理
导读:我正在阅读’ruby中的元编程’ 这是一本优秀的书.说真的,它谈到了我从未听过其他地方提到过的东西. 我有一些关于对象的具体问题(我在前几章) 我知道RubyGems gem将方法’gem’安装到模块Kernel,以便它显示在每个对象上.有没有理由他们没有把它放入Object类?
我正在阅读’ruby中的元编程’

这是一本优秀的书.说真的,它谈到了我从未听过其他地方提到过的东西.

我有一些关于对象的具体问题(我在前几章)

>我知道RubyGems gem将方法’gem’安装到模块Kernel,以便它显示在每个对象上.有没有理由他们没有把它放入Object类?
>他谈到了ruby如何寻找它总是正确的方法. ‘up’究竟是什么意思?我在图中看到它,它只是我不明白’up’的目的.他没有解释那部分内容.
> Object类有什么意义?为什么这些方法不能被放入课堂?如果每个对象都属于一个类(即使它的类),那么对象,基本对象和内核的重点是什么?
> String,Array,blah blah显然是Class的一个实例.类也是它自己的一个实例.所以如果Class是Class的一个实例……它是如何继承Object的呢?代码中的哪个位置与BOTH类和对象有关?
>我知道内核包含可以在任何地方使用的put之类的方法,这与问题1有关,但为什么它们只是压缩它并将它全部放入Object …它似乎一切都从对象继承

解决方法

>两者都可以工作,但通常Object上的方法应该只是处理特定对象的方法.内核模块中的内容不是关于对象而是更全局的.
>我认为这意味着“继承链”.因此,它在子类上查找该方法,然后在该类上查找父类,直到找到一个或用完父类.
> Object自然是所有对象的基类(至少对于ruby 1.8).疯狂的部分是一个类实际上是Class类的一个实例. (您遵循这个?)因此,向Class添加实例方法会向类对象添加方法,但不会向这些类添加实例.
>ruby中几乎所有东西都是物体. Class.superclass实际上是Module(它就像一个你无法实例化的类),Module.superclass返回Object.所以Class<模块<如果是Class类,Object是继承链. (至少为ruby1.8)
>比任何事情更多的约定.由于Object可能会变得相当巨大,因此习惯上将事物放入模块中,然后再将这些模块组合起来.如果该方法不直接将对象的实例作为self处理,则该方法不直接属于Object.像gem这样的更多全局非对象实例方法在内核模块中表示它们只是在任何地方都可用的方法.

关于类对象和继承的更多内容……

class Foo < Bar
  def hi
    puts 'Hi!'
  end
end

这样做真的很棒.当然,它定义了一个类对象.现在,这个类对象被配置为具有名称Foo,父类Bar和方法hi.此信息有点像此类对象的元数据.

现在,类对象Foo本身就是Class的一个实例.但是Foo定义了一个继承自Bar的类. Class类定义了一个数据结构来存储关于类的元数据.

你可以认为Class类sorta有点像这样定义:

class Class < Module

  # fictional method called on class creation
  def set_meta_data(name,superclass,methods)
    @name = name
    @superclass = superclass
    @methods = methods
  end

  # fictional way in which an instance might be created
  def new
    instance = Object.new
    instance.superclass = @superclass
    instance.addMethods(@methods)
    instance
  end
end

所以类对象本身将从Class继承,但它会创建不包含的对象.

将类作为对象的思考可能会以这种方式弯曲,但这也是为什么ruby非常棒.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读