相关疑难解决方法(0)

当它看起来如此相似时,为什么本征类不等同于self.class?

我错过了某个地方的备忘录,我希望你能解释一下这个.

为什么对象的本征类不同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将设置selfFoo.class用于类方法的定义/属性.

我只是困惑吗?或者,这是Ruby元编程的偷偷摸摸的伎俩吗?

ruby language-features eigenclass

80
推荐指数
3
解决办法
1万
查看次数

什么<<在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 arrays operators

61
推荐指数
6
解决办法
5万
查看次数

比红宝石少两倍

可能重复:
对"<<"所做的事感兴趣

我读过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是一个数组.有人可以<<用对象而不是类来解释它的用法吗?

ruby

4
推荐指数
1
解决办法
3314
查看次数

为什么"class << self"中的自我指的是班级?

下面的代码输出"我是事."

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作为实例的上下文中执行的吗?这里发生了什么?

ruby

4
推荐指数
2
解决办法
132
查看次数

标签 统计

ruby ×4

arrays ×1

eigenclass ×1

language-features ×1

operators ×1