Ruby中的类名别名

时间:2014-01-20 21:20:15

标签: ruby class

我有一个类,我想在使用它时用两个不同的名称来引用它。我能想到的唯一方法就是这样做。

class Entrance

  def open
    puts "the door is open"
  end

end

class Exit < Entrance
end

问题在于,在这个例子中我想表示入口和出口是完全相同的东西,而不是Exit是一种入口。有没有更好的方式来代表这个?

4 个答案:

答案 0 :(得分:8)

简单易行:

Exit = Entrance

Ruby中的类实际上只是类Class的对象,它们以其名称分配给常量。所以,只需要一个新常量引用与旧常量相同的对象。

请注意,现在退出和入口是完全相同的类,您对其中的任何操作都会发生在另一个上:

2.0.0p0 :009 > Exit.object_id == Entrance.object_id
 => true

注意:虽然这是可能的,但我会更仔细地考虑您的一般架构。他们在入口和出口之间有什么区别吗?它们都只是真正的门吗?您的体系结构应该是这样的,除非您有真正想要同时使用的两个同义名称,例如PageWebPage,否则类(通常)不需要使用别名(我也建议不要这样做。)

答案 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;门。