instance-eval

    1热度

    2回答

    我想打电话给instance_eval这个类: class A attr_reader :att end 通过这个方法b: class B def b(*args) att end end ,但这种情况正在发生: a = A.new bb = B.new a.instance_eval(&bb.method(:b)) # NameError:

    5热度

    2回答

    我知道发送带有参数的字符串或符号,而instance_eval带有字符串或块,并且它们的差异在给定接收者时可能是明显的。 我的问题是'下引擎盖'的区别在于下面的例子吗? 1234.send 'to_s' # '1234' 1234.instance_eval 'to_s' # '1234'

    5热度

    4回答

    我了解instance_eval和class_eval之间的基本区别。我发现虽然玩耍时有些奇怪,但涉及attr_accessor。这里有一个例子: A = Class.new A.class_eval{ attr_accessor :x } a = A.new a.x = "x" a.x => "x" # ... expected A.instance_eval{ attr_acc

    0热度

    1回答

    有谁知道是什么原因导致了这个错误?我正在尝试制作基本的机架应用程序。 App.rb => class Cherry class << self def app &block Cherry::Application.new &block end end class Application def initialize

    3热度

    5回答

    如果我有一个类: class KlassWithSecret def initialize @secret = 99 end end 并运行: puts KlassWithSecret.new.instance_eval { @secret } 它打印99,但是如果我跑: puts KlassWithSecret.new.instance_eval do

    0热度

    1回答

    我遇到了与instance_eval和模块包含有关的问题。 请看看下面的代码: module B class C def initialize puts 'This is C' end end def hello puts 'hello' end end class A include B

    2热度

    1回答

    我发现传递给class_eval,module_eval和instance_eval的line_number与错误报告的行号不匹配。 任选的第二和第三个参数提供该所报告编译错误时所使用的文件名和 起始行号(使用instance_eval作为例子):此行为不是由ruby-doc它说说明。 所有这三种方法class_eval,module_eval和instance_eval接受两个额外的PARAMS

    0热度

    3回答

    在我开始之前,我尝试过使用instance_eval和singleton方法无济于事。我将在这个问题上提出我的“最佳”尝试。 我努力做到以下几点: value = rule(condition: lambda {@something > 100}) value.act(120) 以上调用不能改变。 什么可以改变的规则是如何定义的: def rule(condition: nil)

    1热度

    2回答

    我的红宝石DSL的用户希望能够添加额外的方法和任意块的上下文中调用它们,例如: def do_something override 'flags', 'ABC' end project('XXX') do configuration('debug') do do_something end end 在这个示例'override'是一个用ins

    7热度

    2回答

    class_eval & instance_eval除def以外的工作方式有什么区别吗?内部class_evaldef块定义方法的类本身(即实例方法)和内部instance_evaldef定义方法的类(即类方法)的eigenclass。 AFAIK所有其它特征在两种情况下(例如define_method,attr_accessor,class << self; end,定义常量)相同方式工作。这是