在WebSharper中的整数类型之间转换

时间:2013-03-26 12:51:10

标签: javascript f# inline websharper

似乎WebSharper在整数类型之间转换有困难(比如,int32uint64)。我明白了:

  

错误:无法转换方法调用:ToUInt64(..)[Microsoft.FSharp.Core.Operators]

同样发生在int32 - > uint32int16 - > int32和其他许多人(只有byte< - > int32似乎正在运作。

所以,问题是:我该如何解决这个问题?我有一个整数iint32,因为我无法得到任何其他内容)现在我想从i得到Uint8Array - 元素。 Uint8Array.Get需要uint64。如何将i转换为uint64

我打算使用[<Inline>]作弊,但这也不起作用,因为即使我尝试返回或作为参数传递任何不同形式int32的整数,我也会收到此错误。

1 个答案:

答案 0 :(得分:4)

从您的评论中,您听起来就像是在正确的轨道上。 WebSharper目前没有实现任何二进制处理.NET API,所以自己实现它是正确的。使用数字类型进行编译时的完整性,同时记住它们在JavaScript中都表示为Number也是一个好主意。如果您缺少标准库中的转换代理,您可以添加或使用Inline定义,我相信这应该有效:

[<AutoOpen>]
module Conversions =

    [<Inline "$0">]
    let inline int64 x = int64 x

    [<Inline "$0">]
    let inline int32 x = int32 x

    [<Inline "$0">]
    let inline uint32 x = uint32 x

    [<Inline "$0">]
    let inline uint64 x = uint64 x

当然,上述实现不会对这些运算符在F#/ .NET中进行截断。