我错过了某个地方的备忘录,我希望你能解释一下这个.
为什么对象的本征类不同self.class?
class Foo
def initialize(symbol)
eigenclass = class << self
self
end
eigenclass.class_eval do
attr_accessor symbol
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的逻辑系列等同于特征类,class.self非常简单:
class << self是一种声明类方法的方法,而不是实例方法.这是捷径def Foo.bar.
因此在对类对象的引用中,返回self应该相同self.class.这是因为,class << self将设置self以Foo.class用于类方法的定义/属性.
我只是困惑吗?或者,这是Ruby元编程的偷偷摸摸的伎俩吗?
我有代码:
def make_all_thumbs(source)
sizes = ['1000','1100','1200','800','600']
threads = []
sizes.each do |s|
threads << Thread.new(s) {
create_thumbnail(source+'.png', source+'-'+s+'.png', s)
}
end
end
Run Code Online (Sandbox Code Playgroud)
什么<<意思?
可能重复:
对"<<"所做的事感兴趣
我读过Ruby类的继承:什么是`<<`(double less than)?.我知道为实例创建方法(继承类型)会有所帮助.但我遇到了一个代码:
threads << Thread.new(page) { |myPage|
h = Net::HTTP.new(myPage, 80)
puts "Fetching: #{myPage}"
resp, data = h.get('/', nil )
puts "Got #{myPage}: #{resp.message}"
}
Run Code Online (Sandbox Code Playgroud)
在哪里threads是一个数组.有人可以<<用对象而不是类来解释它的用法吗?
下面的代码输出"我是事."
class Thing
class << self
def foo
puts "I am #{self}."
end
end
end
Thing.foo
Run Code Online (Sandbox Code Playgroud)
我认为"自我"指的是Thing类型的对象,但它指的是Thing类.我从上一个问题(在评论中链接)中收集到,这与Thing是Object的一个实例有关.从类<< self开始的块实际上是在"self"是指Thing作为实例的上下文中执行的吗?这里发生了什么?