- 浏览: 51287 次
- 性别:
- 来自: 青岛
文章分类
最新评论
从本质上讲,class_eval(也就是module_eval)可进入类定义体中: 1.在类定义的上下文中对字符串求值。 变量var在标准的类定义体的作用域之外,但是传递给class_eval的代码块的作用域之内。 和任何def一样,在代码块中的def打开了一个新的作用域-所以变量var成为不可访问的。 如果就是想要把外部作用域的变量硬塞到实例方法中,可以使用另外一个技术来生成方法:define_method方法。 为了在实例方法中访问变量var,可以这么做:
2 c.class_eval do
3 def some_method
4 puts "created in class_eval"
5 end
6 end
7 C.new.some_method => "created in class_eval"
8
2.为匿名类(不包含单例类)打开类定义。
3.获取外围作用域中变量的访问权。
特别是第3个值得注意,如下代码:
2 class C
3 puts var
4 end => NameError:undefined local variable or method 'var' for C:Class..
5
6 C.class_eval {puts var}
7 => init var
8
当在class_eval的块中定义一个实例方法时,又有所不同:
2 C.new.talk
3 => init
define_method是Module类的实例方法,所以Module或Class的任意实例都可以调用该方法。如果想要在实例方法中访问常规的类定义体中(在此上下文中self是类对象)的局部变量,那么可以在一个通常的类定义体中使用define_method。
发表评论
-
Evaluation in Ruby
2011-12-28 15:45 1151Ruby的evaluation是一个很重要的功能,它可 ... -
Ruby的include和extend
2011-12-28 15:17 1420在ruby中基本上有三种引入module的方式 一、在 ... -
alias, alias_method和alias_method_chain
2011-12-26 16:34 867本文介绍Ruby里的几个关键字。 1. alias ... -
Ruby学习笔记-Block, Proc and Lambda
2011-12-08 14:08 10481.Block: Ruby中的块就是由多行代码组成 ... -
Symbol
2011-12-08 11:25 909Symbol 在Ruby中,有一种奇怪 ... -
rvm 使用 -- ruby 1.9.2 rails 3.1.2
2011-11-21 16:35 1628RVM可以管理不同的ruby,也可以管理同一个ruby下 ... -
hash 和 array 的一个用法
2011-11-01 14:21 694a=[[1,2],[3,4]] Hash[*a ... -
按位与、按位或组合
2011-10-20 18:52 1175下午 看了下 按位与、按位或组合 权限串应用 ... -
gem 降级
2011-10-09 17:21 1947gem uninstall rubygems- ... -
render vs redirect
2011-08-15 15:53 966render和redirect的区别在于: rende ... -
ruby 正则匹配非站内链接
2011-08-01 16:48 943def has_href_not_XXX?(content ... -
form_for && form_tag
2011-07-27 13:47 955<% form_for @XX, :url => ... -
好吧,就这么写了
2011-07-16 17:02 535以后写代码 就按这个思路来 先写 伪代码 再写 ... -
.nil? , .empty?, .blank? .present? 的区别
2011-04-08 17:02 3492首先这三个都是判空的。 而 .nil? 和 .empty? 是 ... -
Ruby的类
2011-03-31 11:40 955类的基本定义 class Myclass #注意类名必须是常量 ... -
private和protected在ruby和Java里的区别:
2011-03-31 10:15 10771、在不同对象实例当中的作用域不同 Java当中,不管priv ... -
java转ruby
2011-03-31 10:14 731换了新工作,开始学习ruby,干了一段时间的java,有必要停 ...
相关推荐
6. **元编程**:Ruby的元编程特性,如`class_eval`、`instance_eval`、`method_missing`等,以及如何利用它们来增强代码的动态性。 7. **测试驱动开发(TDD)**:Ruby社区非常注重TDD,因此可能包含关于Rspec或Test::...
理解元编程的概念,如 `class_eval`、`instance_eval`、`define_method` 等,对于编写灵活的代码至关重要。 3. **Ruby on Rails 框架**:Rails 的核心概念包括 MVC(模型-视图-控制器)架构、路由、数据库交互...
穿得不多(最小的 DSL,没有instance_eval ) 简单示例 # Say we have a model like: class Department belongs_to :company has_many :employees validates_presence_of :company, :name end # Without any ...
instance.singleton_class.class_eval do def unique_method puts "This is a unique method." end end instance.unique_method # 输出: "This is a unique method." ``` ##### 2. 开放类(Open Classes) 在...
Rails大量利用了这一特性,通过模块混入(mixins)、方法定义(define_method)和类扩展(class_eval)等技术来实现其灵活的架构。 2. **ActiveRecord**:这是Rails的ORM(对象关系映射)组件,它将数据库操作转换...
- `eval`和`instance_eval`:`eval`可以执行字符串中的Ruby代码,`instance_eval`允许在特定对象的上下文中执行代码。 - `module_function`和`extend`:这两个方法可以让你在模块中定义的方法在类或对象上直接调用...
- `class_eval`和`instance_eval`:用于在类或对象上下文中执行代码。 5. **Gem包管理系统** - Ruby的生态系统中,Gem是代码库的分发方式。开发者可以使用`gem install`命令安装所需的库,如Rails框架。 - ...
Ruby的元编程能力,如`class_eval`、`instance_eval`和`define_method`等方法,使得动态修改类和对象的行为变得容易,这在实现某些设计模式时特别有用。例如,元编程可以用来在运行时添加方法,实现动态代理或者创建...
11. **类和对象初始化**:Ruby中通过initialize方法初始化对象,而Class.new可以用来创建新的类。 12. **Ruby on Rails**:尽管手册可能主要关注语言本身,但也会涉及Rails框架的基本概念,如MVC架构、路由、数据库...
1. 动态方法定义:Ruby允许在运行时定义新的方法,这包括使用define_method、class_eval等方法。 2. 方法拦截:Ruby提供了method_missing方法,它允许我们拦截对当前对象中未定义方法的调用,并进行自定义处理。 3...
了解 `class_eval`、`instance_eval`、`define_method` 等方法可以帮助你更深入地掌握这一特性。 6. **测试驱动开发(TDD)**:Ruby 社区强调 TDD,因此熟悉 RSpec 或 MiniTest 这样的测试框架是必要的。学会编写...
- **Object#class_eval**:在类的上下文中执行代码。 - **Object#instance_eval**:在对象的上下文中执行代码。 #### 五、Ruby on Rails **5.1 MVC 架构** - **模型**:代表应用程序中的数据和业务规则。 - **...
书中可能会介绍`class_eval`、`define_method`等动态创建方法的技术,以及符号到方法的转换(`to_proc`)等高级特性。 4. **Ruby与Rails的集成**:Rails是基于Ruby的Web开发框架,书中可能会详细探讨Ruby如何与...
- `send`方法可以动态调用对象的方法,`class_eval`和`instance_eval`可以在运行时向类或对象添加代码。 8. **错误处理**: - 使用`begin..rescue..end`结构处理异常,可以捕获并处理程序运行时可能出现的错误。 ...
8. **元编程**:Ruby的元编程能力是其一大特色,通过`class_eval`、`instance_eval`和`define_method`等方法,可以在运行时动态修改类和对象的行为。 9. **线程与并发**:Ruby 1.9.3引入了全局解释器锁(GIL),...
- `class_eval`和`instance_eval`:允许在运行时修改类或对象的定义。 - `define_method`和`method_missing`:前者用于在运行时定义方法,后者是当尝试调用一个不存在的方法时的回调,常用于实现自定义错误处理或...
在 Mac OS X Snow Leopard(版本 10.6)系统下安装 Ruby 和进行 Ruby on Rails 的开发,是许多开发者特别是初学者可能会遇到的需求之一。尽管 Snow Leopard 已经是一个相对较老的操作系统版本,但仍然有不少用户由于...
`class_eval`和`instance_eval`方法可以在运行时添加方法,`method_missing`方法可以捕获未定义的方法调用。 了解并熟练掌握以上知识点是成为Ruby程序员的基础。Ruby的灵活性和强大功能使其在很多领域都有应用,如...
3. **元编程**:Ruby的元编程能力非常强大,可以使用`class_eval`、`instance_eval`等方法在运行时修改或创建类和对象的行为。 4. **块和 Proc**:Ruby中的块是一段可执行的代码,可以与方法一起使用,通过`do..end...
- `class_eval`、`instance_eval`、`define_method`等方法可用于动态定义或修改类和方法。 8. **块与 Proc**: - 块是Ruby中的匿名函数,使用`do..end`或花括号`{}`定义。 - `Proc`对象可以存储块,与`lambda`...