是否可以采取如下记录:
type Foo = {
Bar: int
Baz: double
}
并像函数调用一样构造它? (也许是let foo = Foo 3 4.5
,但这似乎不起作用。)
现在要获得我正在做的功能
let createFoo bar baz = { Bar = bar; Baz = baz }
但我想确保我没有错过任何东西。
谢谢,对不起,如果之前有人询问过这个问题!
答案 0 :(得分:4)
尚未提及您可以将方法添加到记录类型,如
type Foo = {
Bar: int
Baz: double
}
with
static member create bar baz =
{Bar=bar; Baz=baz}
然后像
一样使用它let foo = Foo.create 3 4.5
(所以你必须为语法工作,但它作为类型的一部分保持良好组织。)
答案 1 :(得分:2)
如前所述,只能使用记录构造语法创建记录。使用记录的另一种替代方法(除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,类绝对是更好的选择。
答案 2 :(得分:1)
没有
请注意,有一个称为“类”的好东西,带有一个叫做“构造函数”的东西,看起来它可能适合你的场景。 :)
或者,您始终可以定义函数
let mkFoo x y = { Bar=x; Baz=y }
答案 3 :(得分:0)
我不认为这是可能的 - 我猜想如果你有
会发生什么type Foo = {
Bar: int
Baz: int
}
然后编译器如何知道哪个元素在哪里。