三、类和模块
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)
没有什么不同。
分享到:
相关推荐
在这一版中,作者深入浅出地讲解了Ruby 1.9的改进和新特性,旨在帮助开发者更好地理解和利用这个版本的优势。 1. **Ruby 1.9的关键改进**: - 字符串编码:Ruby 1.9引入了对多种字符编码的支持,使得处理多语言...
总结起来,安装Ruby 1.9的二进制zip包主要涉及下载、解压、配置环境变量和处理依赖。这些步骤对于不熟悉编译环境的用户来说,比从源码编译要简单得多。然而,务必注意保持Ruby及其依赖库的更新,以确保系统的安全性...
10. **内建类和模块的扩展**:Ruby 1.9对很多内建类和模块进行了扩展和增强,比如`String`、`Array`、`Hash`等,提供了更多便捷的方法。 通过阅读《Programming Ruby 1.9》,读者不仅可以掌握Ruby 1.9的最新特性,...
在Ruby 1.9中,Block参数现在是局部的,这意味着它们不再在Block外部可见,这增强了Block的封装性和安全性。这种改变解决了早期版本中的一些问题,使得Block的使用更加安全和灵活。 总之,Ruby 1.9对Lambda函数的...
总的来说,Ruby 1.9 是一个重大更新,它的目标是提升Ruby的效率和表达能力,但这也意味着开发者必须适应新的规则,更新他们的代码库以保持兼容性。这一过程既是一个挑战,也是Ruby语言不断演进的证明。对于那些希望...
本书包含四个主要部分:Ruby使用的著名教程、对语言的权威性参考、所有内置类、模块和方法的完整文档,以及所有97个标准库的完整描述。Ruby 2.0是对Ruby 1.9的小幅更新。Ruby 2.0的主要语言变化是增加了关键字参数,...
Ruby 1.9是Ruby的一个重要版本,引入了许多改进和新特性,包括性能优化、新的字符串编码系统、改进的模块和类的加载机制等。 在本书中,读者将学习到以下核心知识点: 1. **基础语法**:了解Ruby的基本数据类型,...
- **类与其他类的工作方式**: Ruby支持单继承,但也可以通过模块和混合(mix-in)的方式实现多重继承的效果。 - **访问控制**: 如何在Ruby中使用public、protected和private关键字来控制类成员的访问权限。 - **变量**:...
《Programming Ruby 1.9》是第三版,专注于介绍Ruby 1.9.2版本,由Dave Thomas、Chad Fowler和Andy Hunt共同编写。这本书由The Pragmatic Programmers出版社出版,并在Pragmatic Bookshelf上可以下载到。本书全面...
《Programming Ruby 1.9》一书由Dave Thomas、Chad Fowler与Andy Hunt共同编写,是Pragmatic Bookshelf出版的一部权威性指南,旨在帮助读者深入理解和掌握Ruby编程语言的1.9版本。该书不仅是对原版《Programming ...
- **仅支持 Ruby 1.9**:Rango 专门为 Ruby 1.9 设计,利用了 Ruby 1.9 中的新特性和性能提升。 - **代码生成器**:提供了生成器来帮助快速搭建项目结构,但并不强制要求特定的项目结构。 - **代码热加载**:通过...
5. 类和模块:Ruby的类和模块系统允许代码重用和组织,模块可以用来实现多重继承的效果。 6. 自动内存管理:Ruby采用垃圾回收机制自动管理内存,减轻了程序员的负担。 7. 标准库:Ruby附带了一个丰富的标准库,包括...
本书详细介绍了Ruby 1.9版本的特性和编程实践,对于学习和掌握Ruby语言具有重要的指导意义。 ### Ruby 1.9 的特性 Ruby 1.9是Ruby语言的一个重大更新,它引入了多项改进和新特性,包括但不限于性能优化、新的字符...
[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 , ...
通过这些内容的学习,读者将能够掌握Ruby 1.9的基本语法和核心编程技巧,为后续深入学习打下坚实的基础。此外,本书还提供了丰富的实践案例和深入的技术讨论,适合所有级别的Ruby开发者阅读和参考。