gpt4 book ai didi

ruby - 如何在不使用 new 的情况下在 Ruby 中创建对象

转载 作者:数据小太阳 更新时间:2023-10-29 07:03:29 25 4
gpt4 key购买 nike

可以使用 Ruby 创建复数

c = Complex.new(1,2)

但是,它可以缩短为

c = Complex(1,2)

是否可以实现相同的功能而无需在类外部定义函数,如下例所示?

class Bits
def initialize(bits)
@bits = bits
end
end

def Bits(list) # I would like to define this function inside the class
Bits.new list
end

b = Bits([0,1])

我认为 Ruby 应该至少允许下面建议的构造函数之一

class Bits
def initialize(bits)
@bits = bits
end

def self.Bits(list) # version 1
new list
end

def Bits(list) # version 2
new list
end

def Bits.Bits(list) # version 3
new list
end
end

最佳答案

有这个片段:

def make_light_constructor(klass)
eval("def #{klass}(*args) #{klass}.new(*args) end")
end

现在你可以这样做了:

class Test
make_light_constructor(Test)
def initialize(x,y)
print x + y
end
end

t = Test(5,3)

是的,我知道您仍在类外定义一个函数 - 但它只是一个函数,现在您想要的任何类都可以使用它的实现,而不是为每个类创建一个函数。

关于ruby - 如何在不使用 new 的情况下在 Ruby 中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24351218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com