我有一个类,我想在使用它时用两个不同的名称来引用它。我能想到的唯一方法就是这样做。
class Entrance
def open
puts "the door is open"
end
end
class Exit < Entrance
end
问题在于,在这个例子中我想表示入口和出口是完全相同的东西,而不是Exit是一种入口。有没有更好的方式来代表这个?
答案 0 :(得分:8)
简单易行:
Exit = Entrance
Ruby中的类实际上只是类Class
的对象,它们以其名称分配给常量。所以,只需要一个新常量引用与旧常量相同的对象。
请注意,现在退出和入口是完全相同的类,您对其中的任何操作都会发生在另一个上:
2.0.0p0 :009 > Exit.object_id == Entrance.object_id
=> true
注意:虽然这是可能的,但我会更仔细地考虑您的一般架构。他们在入口和出口之间有什么区别吗?它们都只是真正的门吗?您的体系结构应该是这样的,除非您有真正想要同时使用的两个同义名称,例如Page
和WebPage
,否则类(通常)不需要使用别名(我也建议不要这样做。)
答案 1 :(得分:2)
在Ruby类中也是Object。所以你可以这样做:
Exit = Entrance
请注意,这并不意味着您的班级Entrance
现在有另一个名称Exit
。相反,Exit
是一个常量,现在持有对类对象Entrance
的引用。
Entrance.name # => "Entrance"
Exit.name # => "Entrance"
Exit.object_id == Entrance.object_id # => true
答案 2 :(得分:1)
您可以像其他任何名称一样指定常量名称。
class Entrance; end
Exit = Entrance
答案 3 :(得分:0)
也许添加新课程 - 门。退出&lt;门,入口&lt;门。