【发布时间】:2011-11-23 11:19:11
【问题描述】:
假设我在 F# 中定义了一个模块来处理带有度量单位的向量:
module Vec
[<Measure>]
type m
type Vector3<[<Measure>] 'a> =
{
X : float<'a>
Y : float<'a>
Z : float<'a>
}
现在我想创建一个带有let 的变量,其中包含Vector3。我可以这样做:
let my_var : Vector3<m> = {X = 1.0<m> ; Y = 1.0<m> ; Z = 1.0<m>};
我必须像上面那样做很多作业,所以我想知道,有没有办法简化以前的语法?比如:
let my_var : Vector3<m> = { 1.0,1.0,1.0} //this don't compile
let my_var : Vector3<m> = {1.0<m> ; 1.0<m> ; 1.0<m>} //this don't compile either
我想要:
- 避免测量单位规范(
1.0<m>),这可能吗?m不是可以从声明my_var : Vector3<m>隐式推导出来的吗? - 避免使用记录字段名称(如第二个示例)。记录的字段名不是由编译器自己根据顺序推导出来的吗?
【问题讨论】: