是什么class << self在Ruby中做什么?
编程和Ruby的新手,我希望关于符号的这个问题符合要求.据我所知,在红宝石的符号(如:book,:price)是特别有用的哈希键,以及全能做的是字符串可以做的事情一个轻量级的,特定子集.
但是,我在一方面对符号感到困惑.具体来说,当它们在attr_accessor方法类型中使用时,它们看起来更像是一个变量.例如,attr_reader :book, :price.
如果它们是该用法中的变量,那么这有点令人费解,因为它们通常不在变量类型中列出(如$ global,@ instance,local,@@ class,有时候,CONSTANT,变量类型)变量类型被描述.
如果符号是以这种方式使用的变量,那么应该对它们有什么范围?或者它们在这种情况下仍然是某种轻量级的字符串?(或者也许以更广泛的方式,符号,字符串和变量都具有基本的鸭子性质?)提前感谢您的见解和建议.
我理解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_accessor :y }
A.y = "y"
=> NoMethodError: undefined method `y=' for A:Class
a.y = "y"
=> "y" # WHATTT?
Run Code Online (Sandbox Code Playgroud)
怎么样:
ruby ×3
accessor ×1
class-eval ×1
eigenclass ×1
metaclass ×1
singleton ×1
symbols ×1
variables ×1