- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有以下内容:
class Test
@@a = 10
def show_a()
puts "a: #{@@a}"
end
class << self
@@b = '40'
def show_b
puts "b: #{@@b}"
end
end
end
为什么以下工作:
Test.instance_eval{show_b}
b: 40
=> nil
但是我不能直接访问@@b
?
Test.instance_eval{ @@b }
NameError: uninitialized class variable @@b in Object
同样,下面的工作
t = Test.new
t.instance_eval{show_a}
a: 10
=> nil
但以下失败
t.instance_eval{ @@a }
NameError: uninitialized class variable @@a in Object
我不明白为什么我不能直接从 instance_eval
block 访问类变量。
最佳答案
我刚刚在 RubyKaigi 派对上向 Matz 提出了同样的问题。我是半醉,他是清醒的,你可以以此为准。
Anton 是对的——您不能通过 instance_eval() 访问类变量的原因是“仅仅因为”。甚至 class_eval() 也有同样的问题(在我告诉他我已经尝试过之前,Matz 自己并不完全确定 class_eval() )。更具体地说:在范围方面,类变量更像是常量而不是实例变量,因此切换 self(如 instance_eval() 和 class_eval() 所做的)在访问它们时不会产生任何差异。
一般来说,完全避免类变量可能是个好主意。
关于ruby - 使用 class_eval 和 instance_eval 访问 Ruby 类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3434884/
我这样做有什么区别 class T def initialize self.class.class_eval do def test return self.cl
在以下情况下如何传递参数名称..在传递给 class_eval 之前评估名称 class Foo end Foo.class_eval %Q{ def hello(name) p "hello #
我正在使用 Spree,Spree 有一个名为 Order 的类,如下所示: module Spree class Order # class definition. end end
我正在尝试弄清楚如何动态创建方法 class MyClass def initialize(dynamic_methods) @arr = Array.new(dynamic_method
我正在使用 class_eval 编写要在当前类的上下文中执行的代码。在下面的代码中,我想为属性值的变化添加一个计数器。 class Class def attr_count(attr_name)
我不明白 class_eval。 class Module def attr_ (*syms) syms.each do |sym| class_eval %{def #{sy
是否可以临时将某些方法应用到类中进行测试?我希望能够根据多种应用方式运行规范。虽然我可以制作一堆具有不同设置的装置,但我发现在测试中仅 class_eval 模型更容易。例如: describe "s
我正在尝试运行以下命令,但我不断收到 "NoMethodError: undefined method `bar=' for #/Foo:0x86f69ba/" class Class
虽然我已经使用了一段时间,但我似乎对这两种方法感到困惑,我无法理解为什么方法 passengers 没有被添加到以下代码中的对象中: class Bus def number_of_seats
我试图扩展 code from this question用于保存属性值的记录。但是,如果有多个属性,我的代码就会失败。这是代码: class Class def attr_accessor_wi
我正在测试元编程,但有一个案例我不明白: module Bar def self.append_features klass klass.class_eval do def self
我想写一个方法,它接受一个参数并创建另一个方法,用这个参数命名。这是我的代码 class Class def createMethod(attr_name) attr_name = att
我对使用 class_eval 的 Ruby 变量范围的最佳实践有疑问。 在这段代码中,在 class_eval block 中,局部变量 first 和 second 是未定义的。 def pare
我知道可以使用 class_eval 定义实例方法。是否可以在 class_eval 的上下文中定义类方法? 最佳答案 是的,这是可能的: class Foo end Foo.class_eval d
class_eval 有什么区别吗? & instance_eval工作除了def ?里面class_eval block def定义类自身的方法(即实例方法)和内部 instance_eval de
class String def hello "world" end end String.class_eval { def world "hello" end } "
我正在学习 SaaS 斯坦福类(class),尝试完成 this assignment 的第 5 部分 我很难理解这个概念,这就是我试图做的: class Class def attr_acces
为什么我无法访问 class_eval block 中的变量 vehicle: class Vehicle def self.number_of_wheels fail 'DEFINE i
我发现传递给 class_eval、module_eval 和 instance_eval 的行号与错误报告的行号不匹配。 ruby-doc 未解释此行为其中说:(以 instance_eval 为例
test = "a" test.class_eval do # what is going on here??? end 最佳答案 ActiveSupport 将 class_eval 添加到 O
我是一名优秀的程序员,十分优秀!