二、Kernel 和 Object
1、引入了BasicObject对象,作为一个顶级的空白状态对象:
<!---->BasicObject.instance_methods
#
=> [:==,:equal?,:"!",:"!=",:__send__]
Object.ancestors
#
=> [Object, Kernel, BasicObject]
引入这个对象对于Ruby对象体系带来的影响我还不清楚。
2、instance_exec方法,允许传递参数、self到一个block并执行之,也就是说为特定的instance执行block。
<!---->def
magic(obj)
def
obj.foo(
&
block)
instance_exec(self, a, b,
&
block)
end
end
o
=
Struct.new(:a,:b).new(
1
,
2
)
magic(o)
puts o.foo{
|
myself,x,y
|
puts myself.inspect;x
+
y }
更多例子:
<!---->o
=
Struct.new(:val).new(
1
)
o.instance_exec(
1
){
|
arg
|
val
+
arg }
=>
2
在Ruby 1.8中实现这个方法:
<!---->class
Object
module InstanceExecHelper; end
include InstanceExecHelper
def
instance_exec(
*
args,
&
block)
#
!> method redefined; discarding old instance_exec
mname
=
"
__instance_exec_#{Thread.current.object_id.abs}_#{object_id.abs}
"
InstanceExecHelper.module_eval{ define_method(mname,
&
block) }
begin
ret
=
send(mname,
*
args)
ensure
InstanceExecHelper.module_eval{ undef_method(mname) } rescue nil
end
ret
end
end
3、Kernel的require方法载入的文件将以完整路径存储在变量$"中,等价于:
<!---->$
"
<< File.expand_path(loaded_file)
通过在irb中观察$"变量即可看出差别。
4、Object#tap方法,将对象传入block并返回自身,用于链式调用:
<!---->"
hello
"
.tap{
|
a
|
a.reverse!}[0]
#
=> "o"
"
F
"
.tap{
|
x
|
x.upcase!}[0]
#
=> "F" (注意到"F".upcase!返回的是nil)
5、Kernel#instance_variable_defined?方法:
<!---->a
=
"
foo
"
a.instance_variable_defined? :@a
#
=> false
a.instance_variable_set(:@a,
1
)
a.instance_variable_defined? :@a
#
=> true
6、Object#=~
匹配失败的时候返回nil而不是false
<!---->1
=~
1
#
=> nil
7、Kernel#define_singleton_method 方法,
<!---->a
=
""
a.define_singleton_method(:foo){
|
x
|
x
+
1
}
a.send(:foo,
2
)
=>
3
a.foo(
2
)
=>
3
8、Kernel#singleton_methods, Kernel#methods,返回的是将是方法名symbol组成的数组,过去是方法名的字符串数组。
分享到:
相关推荐
在这一版中,作者深入浅出地讲解了Ruby 1.9的改进和新特性,旨在帮助开发者更好地理解和利用这个版本的优势。 1. **Ruby 1.9的关键改进**: - 字符串编码:Ruby 1.9引入了对多种字符编码的支持,使得处理多语言...
总结起来,安装Ruby 1.9的二进制zip包主要涉及下载、解压、配置环境变量和处理依赖。这些步骤对于不熟悉编译环境的用户来说,比从源码编译要简单得多。然而,务必注意保持Ruby及其依赖库的更新,以确保系统的安全性...
5. **数组和哈希初始化**:在Ruby 1.9中,数组和哈希的初始化有了新的语法,如`[1, 2, 3]`和`{a: 1, b: 2}`。哈希的键值对可以用紧凑的语法表示,不再需要`:key => value`的形式。 6. **模块混合**:Ruby 1.9改进了...
在Ruby 1.9中,Block参数现在是局部的,这意味着它们不再在Block外部可见,这增强了Block的封装性和安全性。这种改变解决了早期版本中的一些问题,使得Block的使用更加安全和灵活。 总之,Ruby 1.9对Lambda函数的...
总的来说,Ruby 1.9 是一个重大更新,它的目标是提升Ruby的效率和表达能力,但这也意味着开发者必须适应新的规则,更新他们的代码库以保持兼容性。这一过程既是一个挑战,也是Ruby语言不断演进的证明。对于那些希望...
通过阅读《Programming Ruby 1.9 The Pragmatic Programmers' Guide》,读者不仅能掌握Ruby 1.9的语法和特性,还能了解到良好的编程实践和设计模式,提升编程能力和效率。这本书是Ruby初学者和经验丰富的开发者的...
Ruby是一种快速发展的激动人心的动态语言,本书是Ruby 1.9和Ruby 2.0这两个最新版本的完整参考指南。Ruby是一种完全面向对象的语言,类似于经典的面向对象语言Smalltalk。与Smalltalk一样,它是动态类型的,但与...
Ruby 1.9在性能、语法改进以及新特性方面进行了大量的更新和优化。 - **Ruby 2.0 版本**: Ruby 2.0版本预计将于2010年发布,这表明Ruby 1.9是当时最新的稳定版本。 #### 详细知识点解析 ##### 1. Ruby 基础介绍 - *...
- **第2章**:“Ruby的新特性”,进一步探讨了Ruby作为一门面向对象的语言的特点,并介绍了基本的Ruby语法、数组和哈希表、符号、控制结构、正则表达式、块和迭代器等核心概念。 #### 三、关键知识点详解 ##### 1....
《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 中的新特性和性能提升。 - **代码生成器**:提供了生成器来帮助快速搭建项目结构,但并不强制要求特定的项目结构。 - **代码热加载**:通过...
[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语言具有重要的指导意义。 ### Ruby 1.9 的特性 Ruby 1.9是Ruby语言的一个重大更新,它引入了多项改进和新特性,包括但不限于性能优化、新的字符...
2. 元编程:Ruby的强大之处在于其内置的元编程能力,允许在运行时修改和创建类及对象。 3. 动态性:Ruby的动态性意味着可以在程序运行过程中改变类的行为,增加了代码的灵活性。 4. 块和闭包:Ruby的块和闭包提供了...
通过这些内容的学习,读者将能够掌握Ruby 1.9的基本语法和核心编程技巧,为后续深入学习打下坚实的基础。此外,本书还提供了丰富的实践案例和深入的技术讨论,适合所有级别的Ruby开发者阅读和参考。