`
axgle
  • 浏览: 94547 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Ruby的太极八卦图

阅读更多


Ruby的太极八卦图:和谐、对称、平衡、循环、稳定等原理代表着中华民族对宇宙,对人生的深刻思考。
想不到日本人松本先生把我们中国古代哲学思想应用在了现代程序语言的设计中。
Ruby编程之道,就蕴含在上面的太极八卦图里。

下面是中国古代太极八卦图:


《为什么韩国国旗用了太极八卦图?》
http://zhidao.baidu.com/question/10732132.html

来源:Ruby Hacking Guide
The “Ruby Hacking Guide” is a book that explains how the ruby interpreter (the official C implementation of the Ruby language) works internally.

分享到:
评论
11 楼 dennis_zane 2007-09-14  
楼上的图才算是完整了,OtherClass类的实例是instance,instance的singleton类是(instance),继承自OtherClass,这个(instance)在ruby层次上无法见到。

rb_cObject = boot_defclass("Object", 0);
rb_cModule = boot_defclass("Module", rb_cObject);
rb_cClass =  boot_defclass("Class",  rb_cModule);
metaclass = rb_make_metaclass(rb_cObject, rb_cClass);
metaclass = rb_make_metaclass(rb_cModule, metaclass);
metaclass = rb_make_metaclass(rb_cClass, metaclass);

这一段代码实在是很精彩,放弃讨论先有鸡还是先有蛋,同时创造鸡和蛋,那么对象的生命循环开始。
10 楼 fredzhang 2007-06-12  
如果加上完整的对象关系,八卦图应当如下呈现。
9 楼 fredzhang 2007-06-12  
引用

我有一个疑问,就是这里的OtherClass为什么接在了上面的Object而不是下面的Class?


Class Otherclass
  def test
    puts "test"
  end
end
Otherclass.superclass  => Object

从代码中可以看出任何一个类Otherclass的superclass是Object而不是Class,这是因为任何类均必须是Object。
之所以Otherclass被看作是Class是因为Otherclass的超类Object的meta class(在图中用(Object)表示)继承自Class
8 楼 zhangyu8374 2007-03-31  
在Object.c的Init_Object方法就可以清楚的看到lz所描述的关系。
void
Init_Object()
{
    VALUE metaclass;

    rb_cObject = boot_defclass("Object", 0);
    rb_cModule = boot_defclass("Module", rb_cObject);
    rb_cClass =  boot_defclass("Class",  rb_cModule);

    metaclass = rb_make_metaclass(rb_cObject, rb_cClass);
    metaclass = rb_make_metaclass(rb_cModule, metaclass);
    metaclass = rb_make_metaclass(rb_cClass, metaclass);

    rb_mKernel = rb_define_module("Kernel");
    rb_include_module(rb_cObject, rb_mKernel);


那有没有其余的方式也可以描述类似的关系呢?那个日本人当初是怎么想到的,或者如何抉择的?

谁有这方面的资料吗
7 楼 basicbest 2007-02-07  
寒,真够八卦的

:D
6 楼 axgle 2007-02-05  
thanks.
谁的美工好,能够画一个类似下面的八卦图,谢谢先~~~
下面是我画的,很粗糙,但是大体模样就是这样的,希望能够看到比这个图准确并且漂亮的ruby八卦图
5 楼 dreamhead 2007-02-05  
To axgle:
首先,必须明确一下,希望看这个图时,大家要清楚类和对象的关系,这个图里画的都是对象。只不过,这些对象是“Class”这个类的实例。

区分一下这个图里的标识,蓝色的是真正的类,而灰色的是meta class(也叫singleton class)。也就是说(OtherClass)是OtherClass的meta class。

另外,白色的箭头表示的是继承关系,这也就是说明了,OtherClass是Object的子类,如果你看C实现的话,这个字段是用RClass的super这个字段来表示的。黑色的箭头表示的是这个对象的类,也就是说,OtherClass这个类对象的类是(OtherClass),在C实现中对应RBasic的klass字段。

axgle最开始的这几个图对应着Ruby的类层次最初搭建的过程,也就是对应着bencode所列举的代码。

axgle,你的理解不错,OtherClass确实应该和Class有关系。事实上,确实是这样,这个图中有一个关系没有表示出来,就是meta class的类。去看一下Ruby的实现代码,创建Class的实例的时候,其klass字段设置为Class。

至于你说的,为什么不直接用OtherClass指向Class,我前面强调过,这里表示的是对象之间的关系,(OtherClass)就是Class这个类实例,所以,OtherClass指向了(OtherClass),就表明了它们之间的关系,也就是说“OtherClass是Class的实例”。
4 楼 bencode 2007-02-05  
不是推不推的问题. 这张图反映了Ruby的类(Class Module Object)结构实现

普通的 Ruby 类 都有一个 Sigleton Class(此 Singleton Class 又称之为MetaClass , 而  meta class 的 super class 必要 Class
这样这样.. 你说是先有鸡还是先有蛋?  不是谁先有的问题, 而是你创建一个鸡或蛋, 就解决了.

于是, Class Module 和 Object 就是....

首先:

rb_cObject = boot_defclass("Object", 0);
rb_cModule = boot_defclass("Module", rb_cObject);
rb_cClass =  boot_defclass("Class",  rb_cModule);

in object.c

这句话对应于楼主的第一个图(第一排左边)

metaclass = rb_make_metaclass(rb_cObject, rb_cClass);
metaclass = rb_make_metaclass(rb_cModule, metaclass);
metaclass = rb_make_metaclass(rb_cClass, metaclass);

in object.c

再这三句之后, 就是楼主第一排第二个图了.

好了, 现在鸡(或蛋) 已有了,

以后用常规方式构造的其他对象  就形成了楼主帖的第三个图.


可以参考: http://rhg.rubyforge.org/chapter04.html







3 楼 axgle 2007-02-04  
假如我把“OtherClass”链接在Class上面,但不是用继承关系,而是用“实例化”表示,也就是用黑箭头而非白箭头表示呢?
换句话,“OtherClass应该是Class的实例。”

虽然原图“OtherClass继承Object”可以同样推论出“OtherClass是Class的实例”,但为什么不直接就让“OtherClass是Class的实例”呢?

2 楼 bencode 2007-02-04  
这是继承关系
1 楼 axgle 2007-02-04  
我有一个疑问,就是

这里的OtherClass为什么接在了上面的Object而不是下面的Class?

在ruby里面,
OtherClass=Class.new
OtherClass.respond_to?("class_eval") #=>true



OtherClass=Object.new
OtherClass.respond_to?("class_eval") #=>false


要么是我理解有误,要么就是这个图里OtherClass应该链接在下面的Class,要么我们都错了?

相关推荐

    Ruby-RubyGraphVizGraphViz绘图工具的Ruby接口

    RubyGraphViz是Ruby编程语言与GraphViz图形渲染库之间的接口,允许开发者在Ruby程序中生成复杂的图形和图表。GraphViz是一个强大的开源图形绘制软件,它能够自动生成有向无环图(DAG)、树状图、网络图等多种类型的...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby绘制热点图12

    Ruby绘制热点图12

    使用纯 Ruby测量图像大小_Ruby_代码_相关文件_下载

    使用纯 Ruby 测量图像大小。格式:apng, bmp, cur, gif, ico, j2c, jp2, jpeg, jpx, mng, pam, pbm, pcx, pgm, png, ppm, psd, svg, swf, tiff, webp, xbm, xpm. 更多详情、使用方法,请下载后阅读README.md文件

    Ruby-Rubrowser一个交互式可视化ruby代码依赖图的工具

    Ruby Rubrowser是一款强大的工具,专为Ruby开发者设计,用于交互式可视化代码的依赖关系。它通过解析Ruby代码,提取出其中的模块定义、类和模块的使用情况,然后利用D3(Data-Driven Documents)库将这些信息以有向...

    ruby DBI ruby DBI ruby DBI

    ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...

    Ruby完全自学手册 下

    《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的...

    Ruby-rubybuild编译和安装Ruby

    Ruby是一种动态、开源的编程语言,以其简洁、优雅的语法和强大的元编程能力著称。在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build...

    nyaplot, 用于 ruby的交互式绘图生成器.zip

    nyaplot, 用于 ruby的交互式绘图生成器 Nyaplot Nyaplot是用于 ruby 用户的交互式绘图生成器。 它的目标是在 ruby 中创建交互式绘图,并且仍然允许快速Prototype化。定制和与其他科学 Gems的集成。Nyaplot是来自'nya...

    ruby2ruby.zip

    ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby

    Ruby完全自学手册

    Ruby是一种简洁而功能强大的编程语言,由日本的松本行弘(Yukihiro "Matz" Matsumoto)在1993年开发,并于1995年公开发布。Ruby语言设计之初就非常注重开发人员的编程体验,它拥有自然、表达性强的语法,易于阅读和...

    Ruby-TensorStream用Ruby重新实现TensorFlow

    Ruby-TensorStream的一大亮点是它默认提供了纯Ruby实现的计算图执行器。这意味着整个框架不依赖于TensorFlow的C++或Python接口,而是完全在Ruby环境中运行。这为Ruby开发者提供了更直观、更无缝的体验,同时也减少了...

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    Ruby是一种强大的、面向对象的脚本语言,广泛用于Web开发、服务器端编程和各种应用程序。在Ruby的世界里,管理不同的Ruby实现(如MRI、JRuby、Rubinius、MagLev和MRuby)是非常重要的,这有助于开发者根据项目需求...

    src-oepkgs/ruby-ruby2ruby

    src-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    ruby 报表统计--生成柱状图和饼图

    总的来说,使用Ruby和FusionCharts生成柱状图和饼图是一种高效的方法,可以帮助我们直观地展示统计报表,便于理解和分析数据。通过深入学习和实践,你将能够创建出更加复杂和富有交互性的数据可视化应用。

    ruby安装包下载 | ruby环境搭建

    Ruby是一种强大的动态编程语言,广泛应用于Web开发,脚本编写,服务器管理等领域。为了在没有外网连接的环境中搭建Ruby环境,你需要提前下载并准备相关的安装包。在提供的压缩包中,包含了三个关键文件:`ruby-2.7.2...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码4

    ruby源代码 ruby源代码 ruby源代码 ruby源代码4

    Ruby资源ruby-v3.1.1.zip

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本资源“ruby-v3.1.1.zip”包含了Ruby的最新版本3.1.1,这是一个重要的里程碑,因为它引入了新特性、性能优化以及对旧...

    ruby生成网页预览图onebox.zip

    OneBox 是一个能够通过 url 生成图片预览的一个 ruby gem 库。 当前支持资源类型: 页面 图片 视频 该库设计之初为 http://www.discourse.org/ 使用,如今开源到 ...

Global site tag (gtag.js) - Google Analytics