soc*_*soc 8 java f# language-design units-of-measurement
我想从纯语言设计的角度来看,哪些"特征"(语义和句法)是SI单位的"实现"需要.
如果有人声称某种语言对测量单位有很大的支持,那么通常会预期哪些"功能"?
例如,F#集成了对语言中测量单位的支持.它如何改进例如Java 库?
应该在语言中加入哪些功能以提高单元的可用性?哪些功能不一定与测量单位有关,但实现更好?
F# 相对于 Java UOM 库的优势很简单——类型安全。如果您尝试添加3.<s>
和 ,您将收到编译时错误4.<m / s>
。
在 F# 中,UOM 在类型检查后被删除,因为它是唯一具有此类功能的 .NET 语言。
在回复评论时,这里是一个简单的分数类型及其用法:
type Fraction<[<Measure>] 'a>(a : int, b : int) =
member __.Divisor = a
member __.Dividend = b
member __.AsFloat = float a / float b
static member (*) (a : Fraction<'a>, b : Fraction<'b>) : Fraction<'a * 'b> =
Fraction(a.Divisor * b.Divisor, a.Dividend * b.Dividend)
type [<Measure>] m
type [<Measure>] kg
type [<Measure>] s
let a = Fraction<m / s>(4, 3)
let b = Fraction<kg>(2, 5)
let ``a times b`` = a * b
Run Code Online (Sandbox Code Playgroud)
返回的值是类型Fraction<kg m/s>
,其AsFloat
值为0.5333333333
。