对包含代码的字符串和block求解。
Ruby提供了多种不同类型的求解方式:eval、instance_eval和class_eval。
class_eval 可以在一个类的定义或者module定义的上下文中对给定字符串或block进行求解。我们常常用class_eval来向类的定义中加入方法,或是包含其他的module。
klass = Class.new
klass.class_eval do
def encoded_hello
htnl_escape "Hello World"
end
end
klass.new.encoded_hello #=> Hello World
不使用class_eval也可以达到上面的效果,但是要牺牲代码的可读性。
klass = Class.new
klass.send :define_method, :encoded_hello do
html_escape "Hello World"
end
klass.send :public, :encoded_hello
klass.new.encoded_hello #=> Hello World
使用Object的instance_eval方法,可以在一个类实例的上下文中对给定字符串或block进行求解。这是个功能强大的概念:你可以先在任何上下文中创建一块代码,然后在一个单独的对象实例的上下文中对这块代码进行求解。为了设定代码执行的上下文,self变量要设置为执行代码时所在的对象实例,以使得代码可以访问对象实例的变量。
class Navigator
def initialize
@page_index = 0
end
def next
@page_index += 1
end
end
navigator = Navigator.new
navigator.next
navigator.next
navigator.instance_eval "@page_index" #=> 2
navigator.instance_eval { @page_index } #=> 2
使用Kernel的eval方法可以在当前上下文中对一个字符串求解。可以选择为eval方法制定一个binding对象。如果给定了一个binding对象,求解的过程会在binding对象的上下文中执行。
hello = "hello world"
puts eval("hello") #=> "hello world"
proc = lambda { hello = "goodbye world"; binding }
eval("hello", proc.call) #=> "goodbye world"
http://tech.it168.com/d/2007-09-07/200709071737579.shtml
分享到:
相关推荐
在这个"Ruby基础语法使用方法全套讲解,风格讲解指南大全"中,我们将深入探讨Ruby的核心特性,包括变量、数据类型、控制结构、函数、类和模块等基础知识。 1. **变量**:Ruby中的变量分为五种类型:局部变量(以...
本文深入探讨了Ruby中的代码块(block)特性,从Block的基础定义出发,介绍了其与Lambda的关系、作为方法参数的应用、`yield`关键字的使用、Block与方法之间的转换,以及Block作为对象的本质。通过这些知识点的学习...
### Ruby中Block和迭代器的使用讲解 #### Block的基本概念 Block是Ruby语言中的一个非常重要的特性,可以将其理解为一段可执行的代码片段。它能够像参数一样被传递,并且在方法调用中被激活。Block的强大之处在于...
#### Block中的变量 Block内的变量可以分为两种:局部变量和外部变量。 1. **局部变量**:这些变量仅在Block内部可见,不能在Block外部访问。例如: ```ruby [1, 2, 3, 4].each do |value| square = value * ...
块(block)和 Proc 对象是Ruby的独特之处,它们可以用来实现迭代和回调功能。 Ruby的元编程能力非常强大,可以动态修改类和对象的行为。反射API(Reflection API)允许在运行时检查和操作对象、类和模块的内部结构...
Ruby的块(block)、 Proc 和 Lambda 是实现回调和高阶函数的关键。 元编程是Ruby的一大特色,它允许你在运行时修改代码。Ruby提供了许多工具来进行元编程,如`eval`函数可以执行字符串中的代码,`class_eval`和`...
Ruby中的块(Block)、 Proc 和 Lambda 是其元编程能力的重要体现。它们允许你在运行时创建和修改代码,这在编写高度定制和自适应的程序时非常有用。文档会详细介绍这些概念及其在实际编程中的应用。 此外,Ruby...
块可以与方法一起使用,形成闭包,这样就可以在方法中捕获并操作外部作用域的变量。 6. **元编程**:Ruby的元编程能力非常强大,允许在运行时修改和创建类和对象。这得益于Ruby的反射API和`send`方法,可以动态地...
- 函数与方法:Ruby中的函数被称为方法,可以定义在类或模块中,支持块(block)和 Proc 对象。 2. **面向对象编程(OOP)** - 类与对象:Ruby是纯面向对象的语言,一切皆对象。你可以创建自定义类来封装数据和...
在规则引擎中,Ruby 的闭包使用特别...Ruby 的哲学之一:同一个问题现实中有多种解决方法,所以 Ruby 中也有多种解法,所以闭包的使用也有多种方法。 先看一个代码的例子: Example 1: 代码如下: def foo1 yield end
3. **方法**:Ruby中的方法是实现功能的代码块,可以有参数,也可以返回值。文档会介绍如何定义、调用方法,以及块(block)和 Proc 对象。 4. **异常处理**:Ruby提供了异常处理机制,通过`begin-rescue-end`块来...
此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...
块变量:以yield关键字调用block也可以传递参数,block中竖线(|)之间给出的参数名用于接收来自yield的参数。 竖线之间(如上例中的 | i |)的变量被称作块变量,作用和一个正常方法的参数一样 2、掌握代码块的编写 ...
它详细阐述了Ruby的标准库、类、方法以及其他关键组件的工作原理和使用方式,为程序员提供了全面且深入的理解,以提高开发效率和代码质量。Ruby API文档通常包含多个部分,如核心库、标准库、类库、模块和框架的API...
Ruby还支持块(block),这是一种特殊的语法结构,常与迭代器配合使用,使得代码更加简洁。 面向对象编程是Ruby的强项。本书将深入探讨类和对象的概念,以及如何使用继承、封装和多态性来设计和实现复杂的软件结构...
深入理解Ruby中的block概念,...虽然在概念上block与高阶函数有相似之处,但在实际使用中,block提供了更多的灵活性,特别是在控制流程和与Ruby内建库的交互方面。了解和熟练掌握block,对于深入理解Ruby编程至关重要。
- Ruby 1.9以后版本引入了Green Thread,提供轻量级线程,但并非真正的并发,因为Ruby解释器在MRI实现中使用全局解释器锁(GIL)。 - Fiber:用于实现协程的结构,允许用户控制线程的切换。 学习Ruby语言,不仅...