`

Ruby 1.9概要(3)类和模块

阅读更多

三、类和模块
1、Module#instance_methods, #private_instance_methods, #public_instance_methods Module这三个方法都将返回方法名

的symbol组成的数组,而非过去的字符串数组。

2、Module#const_defined?, #const_get 这两个方法都添加一个参数flag,用来决定是否将它的ancestor中的const包括在查
找链中,例如:

<!---->module A; X  =   1 def  foo; end end
module B
  include A
  const_defined? 
" X "                                #  => true
  const_defined?  " X " ,false                        # uninitialized constant
  const_get  " X "                                     #  => 1
  const_get  " X " ,false                              # uninitialized constant  
end


3、Module#class_variable_defined?方法:

<!---->class  X; end
X.class_variable_defined? :@@a                    
#  => false
class  X; @@a  =   1  end
X.class_variable_defined? :@@a                     
#  => true

class_variable_{get,set}方法:

<!---->class  B; self end.class_variable_set(:@@a,  " foo " )         #  => "foo"


4、Module#attr等价于Module#attr_reader:

<!---->class  Test
  attr:foo
  
def  initialize
    @foo
= 3
  end
end
t
= Test.new
puts t.foo   
# =>3
t.foo = 4       # undefined method "foo="


5、接下来是一个bug fix的问题。下面这段代码是为了证明对象的singleton类继承自对象的类:

<!---->class  X;end; x = X.new;  class   <<  x;p self  <  X; end


在1.8上,这段代码打印nil,这是不符合Ruby的对象模型的,因此在1.9运行已经可以打印正确结果true了。
如果不理解这点,参照俺过去写的《Ruby对象模型》

6、新增Module#module_exec方法,与Object#instance_exec类似

7、绑定未绑定的方法时进行额外的子类型检查,例如下面的代码:

<!---->class  Foo;  def  foo; end end
module Bar
   define_method(:foo, Foo.instance_method(:foo))
end
a
= ""
a.extend Bar
a.foo


在1.8上,这段代码只有当执行到a.foo 的时候才报错:"foo":bind arguments must be an instance of Foo(TypeError)
因为foo是Foo的instance method,因此调用者必须是Foo或者其子类的instance。 而在1.9中,在绑定还没有绑定的方法的时候引入了额
外的检查,因此上面这段代码不必等到a.foo调用就将报错:

<!---->class  Foo;  def  foo; end end
module Bar
   define_method(:foo, Foo.instance_method(:foo))   
# =》 in "defined_method":bind arguments  must be a subclass

of Foo
< TypeError >
end


8、binding#eval方法,新增加的:

<!---->a = 1
binding.eval(
" p a " )   =>   1


这个貌似与1.8中的:

<!---->a = 1
eval(
" a " ,binding)


没有什么不同。

分享到:
评论

相关推荐

    Programming Ruby 1.9 (3rd edition)和源码

    在这一版中,作者深入浅出地讲解了Ruby 1.9的改进和新特性,旨在帮助开发者更好地理解和利用这个版本的优势。 1. **Ruby 1.9的关键改进**: - 字符串编码:Ruby 1.9引入了对多种字符编码的支持,使得处理多语言...

    windows下安装Ruby 1.9 二进制zip包

    总结起来,安装Ruby 1.9的二进制zip包主要涉及下载、解压、配置环境变量和处理依赖。这些步骤对于不熟悉编译环境的用户来说,比从源码编译要简单得多。然而,务必注意保持Ruby及其依赖库的更新,以确保系统的安全性...

    Programming Ruby 1.9

    10. **内建类和模块的扩展**:Ruby 1.9对很多内建类和模块进行了扩展和增强,比如`String`、`Array`、`Hash`等,提供了更多便捷的方法。 通过阅读《Programming Ruby 1.9》,读者不仅可以掌握Ruby 1.9的最新特性,...

    透视Ruby 1.9的Lambda函数

    在Ruby 1.9中,Block参数现在是局部的,这意味着它们不再在Block外部可见,这增强了Block的封装性和安全性。这种改变解决了早期版本中的一些问题,使得Block的使用更加安全和灵活。 总之,Ruby 1.9对Lambda函数的...

    为何Ruby 1.9的不兼容性会导致原有Ruby代码无法工作

    总的来说,Ruby 1.9 是一个重大更新,它的目标是提升Ruby的效率和表达能力,但这也意味着开发者必须适应新的规则,更新他们的代码库以保持兼容性。这一过程既是一个挑战,也是Ruby语言不断演进的证明。对于那些希望...

    Programming Ruby 1.9 & 2.0 The Pragmatic Programmers’ Guide 4th Edition

    本书包含四个主要部分:Ruby使用的著名教程、对语言的权威性参考、所有内置类、模块和方法的完整文档,以及所有97个标准库的完整描述。Ruby 2.0是对Ruby 1.9的小幅更新。Ruby 2.0的主要语言变化是增加了关键字参数,...

    Programming Ruby 1.9 The Pragmatic Programmers' Guide

    Ruby 1.9是Ruby的一个重要版本,引入了许多改进和新特性,包括性能优化、新的字符串编码系统、改进的模块和类的加载机制等。 在本书中,读者将学习到以下核心知识点: 1. **基础语法**:了解Ruby的基本数据类型,...

    ruby 1.9 教程

    - **类与其他类的工作方式**: Ruby支持单继承,但也可以通过模块和混合(mix-in)的方式实现多重继承的效果。 - **访问控制**: 如何在Ruby中使用public、protected和private关键字来控制类成员的访问权限。 - **变量**:...

    Programming Ruby 1.9 3rd edition

    《Programming Ruby 1.9》是第三版,专注于介绍Ruby 1.9.2版本,由Dave Thomas、Chad Fowler和Andy Hunt共同编写。这本书由The Pragmatic Programmers出版社出版,并在Pragmatic Bookshelf上可以下载到。本书全面...

    Programming Ruby 1.9 (Pragmatic Bookshelf 2009).pdf

    《Programming Ruby 1.9》一书由Dave Thomas、Chad Fowler与Andy Hunt共同编写,是Pragmatic Bookshelf出版的一部权威性指南,旨在帮助读者深入理解和掌握Ruby编程语言的1.9版本。该书不仅是对原版《Programming ...

    (ruby 1.9 开发)Rango

    - **仅支持 Ruby 1.9**:Rango 专门为 Ruby 1.9 设计,利用了 Ruby 1.9 中的新特性和性能提升。 - **代码生成器**:提供了生成器来帮助快速搭建项目结构,但并不强制要求特定的项目结构。 - **代码热加载**:通过...

    Ruby编程语言_涵盖Ruby 1.8和1.9

    5. 类和模块:Ruby的类和模块系统允许代码重用和组织,模块可以用来实现多重继承的效果。 6. 自动内存管理:Ruby采用垃圾回收机制自动管理内存,减轻了程序员的负担。 7. 标准库:Ruby附带了一个丰富的标准库,包括...

    Pragmatic.Programming.Ruby.1.9.Apr.2009.pdf

    本书详细介绍了Ruby 1.9版本的特性和编程实践,对于学习和掌握Ruby语言具有重要的指导意义。 ### Ruby 1.9 的特性 Ruby 1.9是Ruby语言的一个重大更新,它引入了多项改进和新特性,包括但不限于性能优化、新的字符...

    [Ruby] Ruby 1.9 & 2.0 编程 (英文版)

    [Pragmatic Bookshelf] Ruby 1.9 & 2.0 编程 (英文版) [Pragmatic Bookshelf] Programming Ruby 1.9 & 2.0 The Pragmatic Programmers' Guide 4th Edition (E-Book) ☆ 出版信息:☆ [作者信息] Dave Thomas , ...

    Pragmatic.Programming.Ruby.1.9

    通过这些内容的学习,读者将能够掌握Ruby 1.9的基本语法和核心编程技巧,为后续深入学习打下坚实的基础。此外,本书还提供了丰富的实践案例和深入的技术讨论,适合所有级别的Ruby开发者阅读和参考。

Global site tag (gtag.js) - Google Analytics