3 回答

TA貢獻1869條經驗 獲得超4個贊
您可以防止創建無效的自定義類型嗎?
不。
“經典”OOP 語言所提倡的“如果防止誤用就不會出現問題”的想法是沒有根據的。如果用戶不閱讀您的文檔就會出現問題。

TA貢獻2003條經驗 獲得超2個贊
1)您可以嘗試將 Probability 設為一個包含隱藏浮點值的結構,但您將無法將其用作數字。另一種選擇是將 IsValid() 方法添加到 Probability(有點類似于 NaN)。
2) Probability(p) 是 p 的副本,類型為 Probability。它是一個運算結果的值,在分配給變量之前沒有地址。當您將其分配給變量時,您可以獲得該變量的地址。

TA貢獻1848條經驗 獲得超10個贊
這個問題每隔一段時間就會出現一次。“確?!辈粫o效值分配給某些自定義類型的唯一方法是在未導出的結構體字段中使用 getter 和 setter 來保護它:
type Probability struct {
p float64
}
func NewProbability(p float64) (Probability, error) {
if p < 0 || p > 1 {
return Probability{}, errors.New("invalid probability")
}
return Probability{p}
}
對于像浮動這樣簡單的東西來說,這可能有點過分了。更明智的方法通常是檢查每當您接受這樣的參數時是否收到有效的概率:
func DidItHappen(p probability) (bool, error) {
if p < 0 || p > 1 {
return false, errors.New("invalid probability")
}
if /* roll the dice */ {
return true, nil
}
return false, nil
}
- 3 回答
- 0 關注
- 164 瀏覽
添加回答
舉報