如何获取实例的名称?红宝石

时间:2014-10-29 16:08:09

标签: ruby

我知道self.class.name会返回类的名称但是实例呢?

例如此代码

module Selling
  def sell
    puts "#{self.class.name} has been sold"
  end
end

class Shop
  include Selling
  def initialize(id)
    @id=id
  end
end

book=Shop.new(1132)
book.sell

打印Shop,我需要的是book

2 个答案:

答案 0 :(得分:2)

对象没有名字。它们可能会也可能不会被一个或多个变量引用,但无法知道哪些变量引用了一个对象以及这些变量的名称是什么。

模块是一种特殊情况,它们的name方法确实返回了它们被赋予的第一个常量的名称,但这就是解释器魔法。

答案 1 :(得分:0)

JörgWMittag already explained您无法检查变量名称。

此处尝试使用具有Book属性的单独name实例来解决您的问题:

module Selling
  def sell(item)
    puts "#{item.name} has been sold"
  end
end

class Shop
  include Selling
end

class Book
  attr_accessor :name
  def initialize(name)
    @name = name
  end
end

bookstore = Shop.new

book1 = Book.new('Moby-Dick')
book2 = Book.new('Of Mice and Men')

bookstore.sell(book1)
bookstore.sell(book2)

输出:

Moby-Dick has been sold
Of Mice and Men has been sold