我讀到它是not possible有一個類的幾個構造函數。所以,下面的代碼將無法正常工作:有一個不同的公共構造函數,而不是私有的構造函數
class C
def initialize x
initialize x,0
end
# Some methods using the private constructor…
def foo
# …
bar = C.new 3,4
# …
end
private
def initialize x,y
@x = x
@y = y
end
end
我曾經想過用一個靜態方法代替公共構造函數,但是這將防止其他類來擴展C
。我也考慮過使用私有後期初始化方法:
class C
def initialize x
post_init x,0
end
# Some methods using the private constructor…
def foo
# …
bar = C.new baz
bar.post_init 3,4
# …
end
private
def post_init x,y
@x = x
@y = y
end
end
但是在這裏,post_init被調用兩次,這不是一件好事。
有沒有辦法給一個公共的構造函數,而私下有一個更完整的方法來創建一個新的實例?如果不是,做類似的最好方法是什麼?
我真的不明白你爲什麼想要這樣做,但是你想出什麼似乎符合你的目的,除了你的代碼中的'post_init'是一個類方法,但是你從實例方法調用它,這是行不通的。 –
我對類方法犯了一個錯誤,它應該是一個實例方法。因此我更新了這個帖子。 – Codoscope
你有沒有想過直接改變'@ y',你需要什麼?它看起來像一個更常見和直接的方法 –