草庐IT

Hap-Eval

全部标签

ruby - 为什么 Ruby class_eval 从范围中删除常量?

我创建了一个带有常量和方法的类:classAFOO='hello'defbarputsFOOendendA.new.bar=>'hello'一切都按预期进行。但是,当我这样做时:A.class_evaldodefbarputsFOOendendA.new.barNameError:uninitializedconstantFOO奇怪...为了解决这个问题,我正在做:A.class_evaldodefbarputsself.class::FOOendend对为什么会这样有什么好的解释吗? 最佳答案 查找常量outwards在词法封闭的

ruby - instance_eval 和 class << self 之间的区别?

我似乎无法理解这两个“构造”之间的确切区别。在我看来,以下小脚本应该输出相同的内容三次:classExampleputsselfclass但是,输出是:Example#Example这是我的理由:Example是Class的实例,所以self在类主体中指的是;class套self随便什么obj在给定的block中,在我的例子中是Class的实例那是Example(这是我可能错的地方);instance_eval在给定实例中运行block,因此,在我的例子中,这与将代码直接放入类主体中的block几乎相同。我目前的猜测是class在Example之间插入一个幽灵类和Class并将self

Ruby eval 在 irb 和文件中的行为不同

此代码在irb中有效:irb(main):037:0>evalnilirb(main):041:0>putsmachinehost=>nilirb(main):042:0>putsattributemachine=>nilirb(main):043:0>然而,当我尝试执行与ruby​​脚本相同的代码时,出现以下错误:../autosys/convert_jil_to_zapp.rb:40:undefinedlocalvariableormethod`machine'formain:Object(NameError)from../autosys/convert_jil_to_zapp.r

ruby - Ruby 中 Kernel::eval 的风险和注意事项?

我正在使用Ruby1.9.2p180。我正在为Rubyvis(成为SciRuby的一部分)编写持续评估工具。基本上,您在输入文件(例如,test.rb)中设置了Rubyvis::Panel,并且此SciRuby类(Plotter)监视test.rb进行修改。当发生变化时,SciRuby通过eval运行脚本。如果我从命令行运行该脚本,它会工作,但是当通过eval执行时,绘图是错误的——一条直线,好像所有数据都消失了,而不是whatyouseehere。注意:以前,这里说SVG不同——但事实证明这是加载REXML而不是nokogiri的结果。Herearethetestscriptsand

ruby - Ruby 1.9.2 中 instance_eval 在哪里定义?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion原谅我的无知,但我一定是漏掉了什么。我可以找到instance_eval的文档对于Object类中的ruby​​1.8.7,但我在任何地方都找不到1.9.2.我知道该功能仍然受支持,因为我正在使用它。它是否已被移至某个secret父类?

ruby - instance_eval 和单例方法的区别

单例方法是一种只在一个实例上定义的方法。foo=Foo.newdeffoo.case#singletonmethodendinstance_eval不是做同样的事情吗?为特定实例定义方法?有什么区别? 最佳答案 Object#instance_eval是一种方法,您确实可以使用它为对象定义方法。单例类是一个“地方”,为对象定义的单例方法“住”在那里。所以这是两个完全不同的东西。 关于ruby-instance_eval和单例方法的区别,我们在StackOverflow上找到一个类似的问题

ruby 性能 : define method with define_method or eval

在查看ActiveSupport源代码时,我注意到有时eval用于define_method就足够的地方。示例:ActiveSupport:Module.delegate我认为define_method是一种更干净、更安全的做事方式。eval相对于define_method有什么好处?性能、内存使用情况还是其他? 最佳答案 当您使用define_method时,您正在定义的方法can'tacceptablock.It’sprettywellknownthatbecauseofadeficiencyinblocksargumentsi

ruby-on-rails - 如何在不使用 eval 的情况下将字符串转换为 Ruby on Rails 中的散列?

这个问题在这里已经有了答案:HowdoIconvertaStringobjectintoaHashobject?(16个答案)关闭9年前。这是需要转换成哈希的字符串。"{:status=>{:label=>'Status',:collection=>return_misc_definitions('project_status')}}"我们不能使用eval因为eval会执行字符串中的方法return_misc_definitions('project_status')。Ruby/Rails中是否有纯字符串操作来完成这种转换?

ruby-on-rails - 为什么在 class_eval 本身就足够时使用 include 模块

在下面的代码中使用了include模块。如果删除包含模块,那么我看到它的方式也会创建一个实例方法。那为什么用户包含模块?http://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations.rb#L1416includeModule.new{class_eval 最佳答案 首先让我们弄清楚一件事。当他们在class_eval中调用super时——这与他们使用includeModule.new{}的原因完全无关。事实上,在destro

发送和 instance_eval 之间的 Ruby 区别?

我知道send接受带有参数的字符串或符号,而instance_eval接受字符串或block,并且它们的区别在给定接收者时可能很明显。我的问题是下面示例的“幕后”区别是什么?1234.send'to_s'#'1234'1234.instance_eval'to_s'#'1234' 最佳答案 来自finemanual:send(symbol[,args...])→objsend(string[,args...])→objInvokesthemethodidentifiedbysymbol,passingitanyargumentssp