是否有可能採取類似的記載:通過位置參數
type Foo = {
Bar: int
Baz: double
}
,構建它像一個函數調用? (也許let foo = Foo 3 4.5
,但似乎並沒有工作。)
現在得到這個功能我做
let createFoo bar baz = { Bar = bar; Baz = baz }
但我想確保我不缺少的東西。
謝謝,對不起,如果這已經問過!
是否有可能採取類似的記載:通過位置參數
type Foo = {
Bar: int
Baz: double
}
,構建它像一個函數調用? (也許let foo = Foo 3 4.5
,但似乎並沒有工作。)
現在得到這個功能我做
let createFoo bar baz = { Bar = bar; Baz = baz }
但我想確保我不缺少的東西。
謝謝,對不起,如果這已經問過!
沒有提到的是,你可以添加一個方法來記錄類型像
type Foo = {
Bar: int
Baz: double
}
with
static member create bar baz =
{Bar=bar; Baz=baz}
,然後用它像
let foo = Foo.create 3 4.5
(所以你必須對語法的工作,但它保持良好的組織類型的一部分)。
我不認爲這是可能的 - 我的猜測,爲什麼會是,如果你有
type Foo = {
Bar: int
Baz: int
}
那麼編譯器如何知道哪個元素去的地方會發生什麼。
號
注意,有一個叫「類」與被稱爲「構造」,似乎像它可能適合您的方案事情一件很棒的事情。 :)
或者,你總是可以定義
let mkFoo x y = { Bar=x; Baz=y }
前面已經提到的功能,記錄只能使用記錄施工語法創建的。另一種使用記錄(除了Brian提到的類別)的替代方法是使用具有單個案例的區分聯盟。
這樣,類型聲明和價值建設僅僅是一個單行:
type Foo = Foo of int * float
// Create value of 'Foo'
let value = Foo(42, 4.2)
// Decompose value into int and float in a function call
let add (Foo(n, f)) =
(float n) + f
聲明類型的這種方式是非常簡單的,所以它交互編寫代碼時工作良好。對於從C#使用的公共API,類絕對是更好的選擇。
替代方案存在於問題中 – manojlds