`
messi_18
  • 浏览: 98755 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

eval in Ruby

    博客分类:
  • ruby
 
阅读更多
今天把之前做的一个工具集成到我的一个工具框架中,结果遇到了问题。我的工具和框架都是用ruby写的,框架通过eval方法调用注册的工具。而我的工具中有一个对于Array的monkey patch。
class Array do
	alias old_zip zip
	def zip(another_array)
		if another_array and another_array.size > size
			(another_array.size-size).times{ self << nil }
		end
		
		old_zip(another_array)
	end
end


我单独运行工具的时候,一切正常。但是,集成之后却报一个错:module Tools.Methods.Array 没有方法zip。

原来是我在一个自定义的module中调用的eval.而传入的string就是我的那个工具原文件,这样看来,monkey patch没有找到Array这样一个类。所以也就无法找到一个zip方法。
我把代码改成这样就好了:
Array.class_eval do
	alias old_zip zip
	def zip(another_array)
		if another_array and another_array.size > size
			(another_array.size-size).times{ self << nil }
		end
		
		old_zip(another_array)
	end
end
分享到:
评论

相关推荐

    Ruby元编程pdf

    7. **eval**:`eval`函数可以接收一个字符串,然后将其当作Ruby代码执行,从而实现动态代码的执行。 8. **定义语法糖(Syntax Sugar)**:Ruby提供了许多语法糖,如`attr_accessor`,`class_eval`等,使得元编程...

    indifferent_eval:Ruby 库 DSL 的块评估模式

    当您制作 Ruby DSL 时,您通常必须在以下各项之间做出决定: # Use a block variable to access the MyConfig instance. # This gives you the benefit of having access to the outer "self" inside of the block...

    ruby-2.5.8.tar.gz

    - **元编程**:Ruby提供了`eval`、`define_method`等方法,允许在运行时修改或创建类和方法,增强了灵活性。 - **异常处理**:通过`begin..rescue..end`结构处理程序中的异常情况。 3. **Ruby-2.5系列的特性**:...

    ruby语言入门教程

    通过`class_eval`或`Module#define_method`等方法,可以在运行时动态创建或修改类和方法。这使得Ruby程序具有高度的可扩展性和自定义性。 在学习Ruby时,了解类和模块的概念至关重要。类是对象的蓝图,定义了一组...

    Ruby基础教程,RUBY入门必备啊~

    Ruby还引入了模块(Module),用于封装方法和常量,提供命名空间和混合(Mix-in)功能,让代码组织更加有序。 Ruby的控制结构包括条件语句(如if、unless、case)、循环(如while、for、each)和流程控制(如break...

    详解Ruby中的instance_eval方法及其与class_eval的对比

    instance_eval方法 这个BasicObject#instance_eval有点类似JS中的bind方法,不同的时,bind是将this传入到对象中,而instance_eval则是将代码块(上下文探针Context Probe)传入到指定的对象中,一个是传对象,一个是...

    ruby-2.5.1

    `eval`函数可以执行字符串作为Ruby代码,`send`方法可以动态调用对象的方法,而`instance_eval`和`class_eval`则可以在特定上下文中执行代码,极大地增加了代码的灵活性。 在Ruby 2.5.1中,标准库也得到了增强,...

    ruby语法基础教程

    §12.3.3 使用eval方法 88 §12.3.4 性能 88 §12.4 Hook和回调方法 89 §12.4.1 什么是Hook 89 §12.4.2 Ruby中的Hook 89 §11.4.2 回调方法 90 §12.5 跟踪程序的运行 90 §12.5.1 set_trace_func 90 §12.5.2 ...

    Ruby Mind Map

    Ruby的`eval`函数可以执行字符串形式的代码,`instance_eval`和`class_eval`则可以在上下文中执行代码,这对于动态调整对象行为或者改变类结构非常有用。此外,Ruby的模块(Module)系统也是元编程的重要工具,模块...

    RUBY基础入门指南

    - **For..in** - **Break, Redo, Next** 这些结构提供了不同的循环控制方式。 ```ruby (1..5).each do |i| if i == 3 next # 跳过当前循环 end puts i end ``` #### 七、方法 **7.1 运算符重定义** 可以...

    Pragmatic.rogramming.Ruby.1.9.and.2.0.4th.Edition.pdf

    7. **模块和混合**:模块用于组织代码,混合(mix-in)机制让类可以像继承一样吸收其他模块的方法。 8. **宝石(Gem)管理**:Ruby的包管理系统,用于安装和管理外部库,如`require`和`gemspec`的使用。 9. **测试...

    Ruby入门教程

    - **12.3.3 使用eval方法** - **12.3.4 性能**:动态方法调用可能会影响程序性能。 **12.4 Hook和回调方法** - **12.4.1 什么是Hook** - **12.4.2 Ruby中的Hook** - **12.4.3 回调方法**:在特定事件发生时调用的...

    Ruby-:Ruby的基础

    模块还可以用来实现命名空间和混入(Mix-in)功能,通过`include`关键字将模块的方法引入到类中。 7. **异常处理**:Ruby提供了异常处理机制,使用`begin/rescue/else/ensure`块来捕获和处理运行时错误。 8. **...

    详解Ruby中的代码块对象Proc

    - `instance_eval`方法允许执行Proc对象中的代码,就像这段代码是在当前对象的上下文中定义的一样。因此,Proc对象可以访问到当前对象的实例变量和方法。 - 当在方法签名中使用`&`操作符时,表示该方法期望接收一个...

    RubyDDD:Ruby Domaini驱动的设计

    例如,我们可以利用Ruby的`class_eval`或`Module#define_method`动态地定义方法,实现灵活的策略模式。同时,Ruby的模块(Module)可以作为混入(Mix-in)来复用代码,实现领域服务和领域行为的组织。 在实践中,...

    ruby 异常处理:rescue

    ruby&gt; file = open(“some_file”) ERR: (eval):1:in `open’: No such file or directory – some_file 一个健壮的程序会合理并漂亮的处理这些问题.面对那些异常是一件讨人厌的工作.C程序员被要求...

    Ruby:对于我所有的Ruby项目

    8. **模块**:模块在Ruby中用于组织代码,提供命名空间,实现类的多重继承(混合-in),以及通过`include`和`extend`关键字来分享行为。 9. **标准库**:Ruby的标准库包含许多实用的模块和类,如文件操作、网络通信...

    ror系列

    书中讲解了`send`方法、`class_eval`和`instance_eval`,以及如何通过反射机制操作对象和类。 10. **标准库和Gem**:Ruby拥有丰富的标准库和第三方Gem,这些资源极大地扩展了Ruby的功能。书中会介绍一些常用库和...

Global site tag (gtag.js) - Google Analytics