我知道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
答案 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