ruby - 在 Ruby 中,如何定义一个与类同名的类构造方法?

标签 ruby constructor

我不确定我在哪里看到过这个,或者我是否只是认为我看到过它,但我希望能够调用一个方法来创建一个具有相同名称的类的实例。所以,而不是:

# The class is called 'Vector3', for example:
Vector3.new(x,y,z)

我想要一个实例化类的同名方法,如下所示:

Vector3(x,y,z) #<- returns instance of Vector3 class

您如何在 Ruby 中定义它?

最佳答案

正如@Eli 提到的,您可以在内核中定义一个方法:

def Kernel.Vector3(*args)
  Vector3.new(*args)
end

Ruby 为 ArrayComplexFloatHashInteger 执行此操作>、RationalString 您可能见过的地方。

它起作用的原因是 Object 包含 Kernel,因此程序中的所有对象(除了直接继承自 BasicObject 的对象)都将具有那个方法。

但是,这样做是不合常理的、不必要的(你用一个额外的方法使所有对象困惑)、令人困惑(大写的标识符应该是常量)并且通常被看不起。

关于ruby - 在 Ruby 中,如何定义一个与类同名的类构造方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968342/

相关文章:

ruby-on-rails - alias_method、alias_method_chain 和 self.included

ruby-on-rails - Rails 博客 : Edit is Creating a Duplicate Record

c++ - 声明类实例的两种方式的区别

c++ - 基类和派生类中的构造函数

java - 我正在尝试将今天的日期添加到我的对象中,但构造函数出现问题

c++ - 错误 : expected identifier before ‘public’ , 预期 ‘{’ 之前 ‘public’

ruby-on-rails - Ruby 2.1.1,找不到 Railties

ruby - 检查 *this* 类中是否定义了方法

ruby - 在 PostgreSQL 中按指定列分组

c++ - 为泛型类传递比较函数