`
cxh116
  • 浏览: 76523 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Ruby Eigenclass详解

阅读更多
  经过三个多月的RUBYP实战,重新细读了电子书<Ruby编程语言_涵盖Ruby 1.8和1.9>,终于理解了Eigenclass,也就是我们常说的元类(Metaclass)

  目标:证明Kitty类是其Eigenclass的实例

  为了文字好解説,先上代码
class Kitty
  def hi
    puts 'hi kitty'
  end

  class << self
    Object::A = self #获取Kitty的eigenclass类
    def foo
    end
  end
end

class Object::A #打开Kitty的eigenclass类
  def hello
    puts 'hello kitty'
  end
end

k = Kitty.new
k.hi
Kitty.hello #调用实例方法
puts Object::A.instance_methods.include? 'hello'

# Object::A.new  #报can't create instance of virtual class (TypeError) 错误


说明一下关系
k 是Kitty的实例,Kitty是其元类(Eigenclass)的实例

步骤:
  1. 获取Kitty的Eigenclass
  2. 打开Kitty的Eigenclass类,定义一个实例方法
  3. Kitty调用实例方法,如果成功,表示,Kitty是其Eigenclass的实例


事实上,说Kitty类是其Eigenclass的实例我想是不正确的.
看代码
message = "hello"
class << message
  def world
    puts 'hello world'
  end
end
message.world


那么字符串"hello"是谁的实例,是String,还是"hello"的eigenclass的实例?

在书的258页提到方法的查找顺序,首先在对象的eigenclass查找单键方法.
也就是说,对象的单键方法都定义在对象的其eigenclass里
这也就解释了Kitty.singleton_methods为什么会输出["hello","foo"].因为这两个方法都定义在Kitty的eigenclass里

最终结论,所有的对象都有一个eigenclass,包括类对象Kitty
0
13
分享到:
评论
4 楼 cxh116 2011-11-24  
genius_45 写道
请问:学习Ruby, C 还那么重要吗?

不会也没关系 会的话更好

  如果不会,那边是一个渐进的累积过程
  先关注怎么用好RUBY语言,写良好的程序
  真正的到了关注性能和底层那一层  再慢慢的补习C
3 楼 genius_45 2011-11-23  
请问:学习Ruby, C 还那么重要吗?
2 楼 cxh116 2011-08-01  
skandhas 写道
看Ruby的C代码实现,你就会彻底清楚了。尤其是看Ruby对象模型的实现。

 

正打算看<C语言参考手册>,决定打好基础
1 楼 skandhas 2011-08-01  
看Ruby的C代码实现,你就会彻底清楚了。尤其是看Ruby对象模型的实现。

相关推荐

    eigenclass:Ruby 中的特征类(元类)

    从那时起,Ruby 引入了几个新方法,它们提供与这个 gem 的eigenclass和edefine_method方法相同的功能。 安装 gem install eigenclass 要求 Ruby 1.8.7+ 用法 Ruby 中的一切都是对象,包括类。 SomeObject = ...

    ruby元编程.pdf

    4. 特殊方法(Eigenclasses):在Ruby中,每个类都有一个与其相关的单独类,被称为 eigenclass 或 singleton class,也常被称为 metaclass。通过理解 eigenclass 的工作原理,程序员可以实现更高级的元编程技巧,...

    Ruby编程语言

     7.7单键方法和EIGENCLASS257  7.8方法查找258  7.9常量查找261  第8章反射和元编程265  8.1类型、类和模块266  8.2对字符串和块进行求值268  8.3变量和常量271  8.4方法272  8.5钩子方法277  8.6跟踪279 ...

    元编程 Ruby

    Ruby中的每个类都拥有一个对应的元类(也称为eigenclass或singleton class),这是实现元编程的关键结构,因为元类允许我们在运行时给类动态地添加方法和属性。 Ruby的元编程能力在Rails框架中得到了广泛的应用。...

    Meta Programming Ruby

    3. **Eigenclasses与类层次结构**:每个对象都有一个独特的类,称为“eigenclass”,它可以用来为单个对象定制行为,而不会影响其他同类对象。 4. **闭包与块**:Ruby支持闭包(closures),即可以访问其定义作用域...

    基于机器学习算法的特征值分类(MATLABR2019b)

    基于机器学习算法的特征值分类(MATLABR2019b):特征值分类 (EigenClass)。 在这项研究中,提出了一种精确高效的基于特征值的机器学习算法,特别是特征值分类(EigenClass)算法,用于处理分类问题。 使用具有不同...

    精确稳定的机器学习算法:特征值分类.zip,这是一份不错的文件

    首先,我们看到三个MATLAB文件:EigenClass.m、confusionmatResults.m和main.m。MATLAB是一种广泛用于数值计算和数据分析的编程语言,特别适合处理矩阵和向量操作,因此在机器学习中非常常见。 1. **EigenClass.m**...

Global site tag (gtag.js) - Google Analytics