作为一个Ruby初学者,最让我感到头痛的就是Proc,Class,Module,Kernel,Object这几者之间的关系,如果能把他们搞懂,并且可以玩弄于股掌之间的话,感觉这样才算是真正进了Ruby的大门。本文记录我在学习并感受这几个类时的点点滴滴。
Class的官方文档url:http://corelib.rubyonrails.org/classes/Class.html
(虽然《Programming Ruby 中文版第二版》翻译的已经算是不错了,但是在后面内置类库的一些译法上,我认为有可商榷之处。当我遇到书中有些话不能理解的时候,我会直接到ruby的网站上去看官方的英文文档。)
说明:请注意,Class是Module的子类。
在irb中运行:
Class.ancestors
输出:
=> [Class, Module, Object, Kernel]
运行:
Module.ancestors
输出:
=> [Module, Object, Kernel]
运行:
Object.ancestors
输出:
=> [Object, Kernel]
运行:
Kernel.ancestors
输出:
=> [Kernel]
- 其中Class, Module, Object 都是class,而Kernel是Module。
- Object mixes in the Kernel module, making the built-in kernel functions globally accessible. Although the instance methods of Object are defined by the Kernel module, we have chosen to document them here for clarity.
- Object混入了Kernel这个模块,又由于Object是Ruby中所有类的父类,这样以来,Kernel中内建的核心函数就可以被Ruby中所有的类和对象访问。
- Object的实例方法由Kernel模块定义。
- Kernel模块中定义了private method和public method
- 对于一个普通的对象,可以直接调用Kernel的public method
- 在irb中运行: a=Object.new
输出:=> #<Object:0x2ee9470>
输出:
=> ["inspect", "clone", "public_methods", "display", "instance_variable_defined?", "equal?", "freeze", "methods", "respond_to?", "dup", "to_yaml_style",
"instance_variables", "__id__", "method", "eql?", "id", "singleton_methods", "send", "taint", "to_yaml_properties", "frozen?", "instance_variable_get", "__send__", "instance_of?", "to_a", "to_yaml", "type", "protected_methods", "instance_eval", "object_id", "require_gem", "==", "require", "===", "taguri", "instance_variable_set", "kind_of?", "extend", "gem", "to_s", "taguri=", "hash", "class", "private_methods", "=~", "tainted?", "untaint", "nil?", "is_a?"]
- 而要想调用一个普通对象所包含的Kernel的函数,用一般的调用方法无法做到,只有通过Send来实现:
分享到:
相关推荐
Ruby语言教程:Ruby 变量示例
Ruby经典系列: exceptional ruby 教你在ruby代码中如何处理异常
Ruby on Rails: Up and Running
Ruby语言教程:从入门到实践.md
Ruby Cookbook: Recipes for Object-Oriented Scripting Why spend time on coding problems that others have already solved when you could be making real progress on your Ruby project? This updated ...
默认值:-j2 ruby_default :要设置的默认ruby版本标签ruby :适用于整个角色ruby:config :仅适用于配置部分ruby:install :仅适用于ruby编译/安装部分依存关系删除本剧本范例这主要用作现有剧本中的依赖项,例如...
class TestModule def piyo # ... end end dp %w[ 100 101 102 ] dp test : 1000 dp TestModule . method ( :instance_method ) dp TestModule . instance_method ( :piyo ) 运行 ruby 脚本: $ ruby -...
需要安装rBench进行测试 gem install rbench 博文链接:https://yapex.iteye.com/blog/220596
class OrderState include Ruby :: Enum define :CREATED , 'created' define :PAID , 'paid'end OrderState :: CREATED # 'created'OrderState :: PAID # 'paid'OrderState :: UNKNOWN # raises Ruby::Enum::...
Learn the principles behind object-oriented programming and within a few chapters create a fully functional Ruby application. You'll also gain a basic understanding of many ancillary technologies such...
p6df-Ruby目录p6df-Ruby徽章概括贡献行为守则变化用法p6df-ruby:p6df-ruby / init.zsh: p6_ruby_prompt_info() p6df :: modules :: ruby :: deps() p6df :: modules :: ruby :: home :: symlink() ...
Ruby的SNMP库摘要 该库实现了SNMP(简单网络管理协议)。 它是在纯Ruby中实现的,因此不依赖于像这样的外部库。 您可以在Ruby可以运行的任何地方运行该库。 此版本支持以下内容: GetRequest,GetNextRequest,...
这是一个短小的ruby入门教程,完全读完只需20分钟,你将了解到ruby语言的基础知识,当然,要深入学习ruby, 还得学习更多的ruby知识。现在就开始领略这20分钟教程吧.这里假设读者已经安装了ruby,如果你没有安装的话,请...
Docker化的Ruby Koans Ruby Koans和一个容器。 没有更多的依赖痛苦:-)。 受到 , 和所做工作的启发。前置依赖项(在终端上运行) Docker安装程序正常工作: docker -v 克隆此存储库: ...
circleci-ruby-orbs CircleCIRuby球要求Ruby和捆绑器推荐用法通用设置 # .circleci/config.ymlversion : 2.1orbs : # Use specific version # see. ...
Ruby-2.1 编译和安装 Ruby 2.1 ( ) 和 Bundler ( ) 的 Ansible 角色。 角色变量 由角色本身设置的变量(不需要修改) 默认设置将安装最新版本的 Ruby 2.1。 ruby_library_version:其他角色可能会使用它来确定 ...
官方离线安装包,亲测可用
2D-Ruby-Revamped:2D Ruby Adventure改进
Ruby-Snippets:少量的Ruby代码