作为一个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 on Rails:MVC架构理解.docx
### Ruby语言教程:深入解析Ruby变量类型 #### 一、引言 在编程语言中,变量扮演着极其重要的角色,它们用于存储数据并在程序运行过程中对其进行操作。Ruby 作为一种动态类型的脚本语言,提供了多种变量类型,使得...
### Ruby on Rails: The Scope Method 在Ruby on Rails框架中,`scope`方法是一个非常强大的工具,用于定义数据库查询的预设条件,从而简化代码并提高可读性和可维护性。下面将详细介绍`scope`方法的基本概念、用法...
2. **Rails框架概念**:Rails的核心设计理念是DRY(Don't Repeat Yourself)和Convention Over Configuration,旨在减少重复代码并提供一套默认的最佳实践。Rails中的关键组件包括模型(Model)、视图(View)和控制...
`define_method`和`class_eval`是Ruby元编程中的两个关键方法,它们被广泛用于动态地添加方法到类或者模块中。这篇文章将深入探讨这两个方法的用法和区别。 `define_method`方法允许我们传递一个符号和一个代码块来...
Ruby的`json`模块提供了`JSON.parse`和`JSON.generate`两个核心方法,分别用于解析JSON字符串和生成JSON格式的字符串。 #### 解析JSON ```ruby require 'json' json_string = '{"name": "John", "age": 30, "city...
Ruby语言中异常处理是确保程序稳定运行的重要组成部分。在Ruby经典系列书籍《Exceptional Ruby》中,作者详细探讨了在Ruby代码中如何有效地处理异常,以及如何设计健壮的错误处理策略。 首先,了解“失败”的概念...
本教程涵盖了Ruby语言的基本概念和技术要点,包括安装、IRB的使用、基本的数据类型、变量、方法、字符串处理以及面向对象编程。通过这些基础知识的学习,读者可以快速入门Ruby编程,并为进一步深入学习打下坚实的...
接着详细讲解了Ruby的基础语法,如变量、数据类型、运算符、控制流等,并深入探讨了面向对象编程的关键概念,包括类、对象、继承、封装和多态。随后介绍了Ruby的一些高级特性,如模块、异常处理、迭代器和文件I/O...
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 -...
内容概要:本文是一份详尽的Ruby语言教程,从Ruby的基本概述入手,介绍了其主要特点、环境搭建、基础语法、面向对象编程概念、高级特性和Web开发框架Rails的应用。主要内容包括:Ruby的特点、安装方法、变量和数据...
本文将深入探讨Ruby脚本的概念、特点,并提供实际的代码示例来展示其实用性。 Ruby脚本是一种灵活、强大且表达力丰富的编程语言。它以其简洁的语法、动态类型系统和面向对象的特性而受到开发者的喜爱。Ruby的块、...
Ohm的核心概念包括模型(Model)、键(Key)和集合(Set)。模型是Ruby类,它们继承自Ohm::Model,并定义了与Redis关联的属性。每个模型都可以有自己的键,这是一组由Ohm自动生成的Redis命令,用于管理模型实例的...
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...
在"ruby-selenium-webdriver-master1"这个项目中,可能包含了示例代码、测试脚本以及相关的说明文档,这些可以帮助你更好地理解和实践Ruby Selenium Web驱动程序的用法。你可以通过阅读源码和运行测试来进一步学习。...
Ruby-rufusscheduler是Ruby语言中的一个强大的作业定时调度库,它允许开发者在特定时间或按照预设周期执行任务。这个库,名为rufus-scheduler,为Ruby开发者提供了灵活和可靠的计划任务功能,适用于各种场景,如定期...
面向对象设计是计算机科学中的一个核心概念,它是一种通过创建对象、类以及对象间的方法来设计软件的编程范式。这种设计方式允许程序员对现实世界中的问题进行建模,将现实世界中的实体转换成软件世界中的对象。面向...
### Ruby语言入门教程:从安装到编写 #### 一、Ruby简介 Ruby是一种简洁、高效的面向对象编程语言,由日本人松本行弘(Yukihiro Matsumoto)于1995年设计并开发。其设计理念强调程序员的幸福感,追求代码的可读性...