`

Ruby 1.9概要(2)Kernel和Object

阅读更多

二、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
=  Struct.new(:a,:b).new( 1 , 2 )
magic(o)
puts o.foo{
| myself,x,y |  puts myself.inspect;x  +  y }


更多例子:

<!----> =  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?方法:

<!----> =   " 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.define_singleton_method(:foo){
| x |  x  +   1 }
a.send(:foo,
2 )   => 3
a.foo(
2 )   =>   3


8、Kernel#singleton_methods, Kernel#methods,返回的是将是方法名symbol组成的数组,过去是方法名的字符串数组。

分享到:
评论

相关推荐

    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

    5. **数组和哈希初始化**:在Ruby 1.9中,数组和哈希的初始化有了新的语法,如`[1, 2, 3]`和`{a: 1, b: 2}`。哈希的键值对可以用紧凑的语法表示,不再需要`:key =&gt; value`的形式。 6. **模块混合**: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 The Pragmatic Programmers' Guide

    通过阅读《Programming Ruby 1.9 The Pragmatic Programmers' Guide》,读者不仅能掌握Ruby 1.9的语法和特性,还能了解到良好的编程实践和设计模式,提升编程能力和效率。这本书是Ruby初学者和经验丰富的开发者的...

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

    Ruby是一种快速发展的激动人心的动态语言,本书是Ruby 1.9和Ruby 2.0这两个最新版本的完整参考指南。Ruby是一种完全面向对象的语言,类似于经典的面向对象语言Smalltalk。与Smalltalk一样,它是动态类型的,但与...

    ruby 1.9 教程

    Ruby 1.9在性能、语法改进以及新特性方面进行了大量的更新和优化。 - **Ruby 2.0 版本**: Ruby 2.0版本预计将于2010年发布,这表明Ruby 1.9是当时最新的稳定版本。 #### 详细知识点解析 ##### 1. Ruby 基础介绍 - *...

    Programming Ruby 1.9 3rd edition

    - **第2章**:“Ruby的新特性”,进一步探讨了Ruby作为一门面向对象的语言的特点,并介绍了基本的Ruby语法、数组和哈希表、符号、控制结构、正则表达式、块和迭代器等核心概念。 #### 三、关键知识点详解 ##### 1....

    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.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.Apr.2009.pdf

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

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

    2. 元编程:Ruby的强大之处在于其内置的元编程能力,允许在运行时修改和创建类及对象。 3. 动态性:Ruby的动态性意味着可以在程序运行过程中改变类的行为,增加了代码的灵活性。 4. 块和闭包:Ruby的块和闭包提供了...

    Pragmatic.Programming.Ruby.1.9

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

Global site tag (gtag.js) - Google Analytics