Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在WebSharper中转换整数类型_Javascript_F#_Inline_Websharper - Fatal编程技术网

Javascript 在WebSharper中转换整数类型

Javascript 在WebSharper中转换整数类型,javascript,f#,inline,websharper,Javascript,F#,Inline,Websharper,WebSharper似乎在整数类型之间转换有一些困难(例如,int32到uint64)。我明白了: 错误:无法转换方法调用:ToUInt64(..)[Microsoft.FSharp.Core.Operators] 同样的情况也发生在int32->uint32,int16->int32和许多其他(只有byteint32似乎在工作) 所以,问题是:我如何回避这个问题?我得到了一个整数I(它是int32,因为我不能得到任何其他东西),现在我想从Uint8Array中得到I-第th个元素Uint8Ar

WebSharper似乎在整数类型之间转换有一些困难(例如,
int32
uint64
)。我明白了:

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

同样的情况也发生在
int32
->
uint32
int16
->
int32
和许多其他(只有
byte
int32
似乎在工作)

所以,问题是:我如何回避这个问题?我得到了一个整数
I
(它是
int32
,因为我不能得到任何其他东西),现在我想从
Uint8Array
中得到
I
-第th个元素
Uint8Array.Get
需要一个
uint64
。如何将我的
I
转换为
uint64


我本来打算使用一个
[]
作弊,但这也不起作用,因为即使我试图返回或传递任何不同于
int32

形式的整数作为参数,从您的注释来看,我也会遇到这个错误。听起来您的思路是正确的。WebSharper目前没有实现任何二进制处理.NETAPI,因此自己实现它是正确的。使用数字类型来保证编译时的完整性,同时记住它们在JavaScript中都表示为
Number
,这也是一个好主意。如果标准库中缺少转换代理,可以添加它们或使用
Inline
definition,我相信这应该可以:

[<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
[]
模块转换=
[]
让内联int64 x=int64 x
[]
让内联int32 x=int32 x
[]
设内联uint32 x=uint32 x
[]
设内联uint64 x=uint64 x

当然,上面的实现没有像这些操作符在F#/.NET中那样进行截断。

我很好奇,您使用这些类型的动机是什么?目前,这些都没有正确实现,但在JS中表示为
Number
,因此您可以始终将:
转换为(x:int32)
@toyvo我正在解析一个二进制文件(这将是一个虚拟机,但这并不重要)。我希望静态类型能引导我通过这种二进制格式的迷宫,但结果是1)我不能用它来减少错误的数量;2) 我根本不能用它。我意识到,一旦翻译成JS,这不会有任何区别,但我只需要编译时检查。@toyvo哦,顺便说一下,当我想阅读
uint32
时,这会变得更有趣。我必须把它读成
int32
一个字节一个字节(所有必要的小尾端位都在变戏法),因为
System.BitConverter
也不工作,然后…我得到了一个有符号的int。所以我不得不
[]
JS的
>0
技巧。@mydogisbox我不确定你想在那里看到什么。基本上,我从
FileReader
获得了一个
Uint8Array
。我已经用一系列方法围绕这个数组实现了一个类似文件的对象,包括
Seek
。然后,例如,我读取一个
uint32
,它是我正在查找的数据的偏移量。现在,
Seek
的签名中不能有
uint64
,因此它有
int32
,然后调用
data.Get(uint64 i)
<代码>作为实际上在这里有所帮助(我不是一个有经验的.Net开发人员,所以我错过了它)。这意味着问题已经解决,但我仍然希望返回不同的整数以使静态检查生效。@kirelagin听起来你在做一些非常酷的事情。我喜欢虚拟机。如果您坚持使用WebSharper并有疑问,请继续在此处或上发布。我也希望看到你的申请-如果可能的话,那就是。干杯。好的,我会让你知道当我觉得它准备好被推到一个公共回购。作为预览,您可以查看(它是俄语的,但我希望这不是问题)。@kirelagin俄语不是问题:)所以您希望浏览器中有Dalvik emulator。这听起来很疯狂(从一个好的方面来说——雄心勃勃)。不过,解释器方法对您不起作用。您需要的是将Dalvik字节码转换为JS(可能是ASM.JS),然后浏览器将再次将其JIT为本机代码。WebSharper可以帮助用户界面,但听起来您可以从使用F#适当的交叉编译器中获益。现在你可以很容易地把它变成一个云服务。嘿,事实上,我已经决定走InPreter的道路。我真的很想翻译,我对翻译考虑了很多……我不确定我能用文字表达出来,但在我看来,字节码(即不是源语言)翻译不会像人们期望的那样有效,特别是在线程方面。另一方面,有许多Java虚拟机是用JS编写的,这使我相信Dalvik虚拟机也是可能的。