首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Int类型转换

Int类型转换
EN

Stack Overflow用户
提问于 2013-03-17 21:34:21
回答 1查看 6.8K关注 0票数 6

1)如何将Int类型转换为Num类型?

以前也有人问过类似的问题,答案是(就像在Haskell wiki上一样)是使用fromIntegralfromIntegral返回一个Num类型,所以我必须将其转换为我想要的格式。

我需要获取Word16并将其转换为Int64,因此我执行以下操作

代码语言:javascript
复制
let valueLength = (fromIntegral(tagLength) :: Int64)

其中,tagLength的类型为Word16

这种方法正确吗?

2)如何安全地处理类型转换?

我来自Java背景,我相信ShortIntLong都是整数,我可以使用short作为int,但不能反过来。但是在Haskell中,如果我写

代码语言:javascript
复制
256 :: Word8

ghci中,它返回0。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-17 22:13:29

我需要获取Word16并将其转换为Int64,因此我执行以下操作:

让valueLength = (fromIntegral(tagLength) ::Int64)

这种方法正确吗?

让我们问问GHC!

代码语言:javascript
复制
Prelude Data.Word Data.Int> :t fromIntegral :: Word16 -> Int64
fromIntegral :: Word16 -> Int64 :: Word16 -> Int64

看起来不错。

如何安全地处理类型转换?

Haskell没有类型转换。完全没有。所有的“转换”都必须通过编写一个从一种类型“转换”到另一种类型的函数来完成。

如果我用ghci编写256 :: Word8,它会返回0

数字文字是多态的。对于没有小数点的东西,fromInteger是隐式使用的:

代码语言:javascript
复制
Prelude> :t 256
256 :: Num a => a
Prelude> :t fromInteger
fromInteger :: Num a => Integer -> a
Prelude> fromInteger (256 :: Integer) :: Word8
0

如果对于单态类型的数值文字有一个警告或其他东西超出了该类型的范围,那就更好了;也许您应该在GHC的bug跟踪器上提交一个特性请求。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15461316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档