【问题标题】:Haskell: Converting Int to StringHaskell:将 Int 转换为 String
【发布时间】:2011-02-16 13:49:50
【问题描述】:

我知道你可以使用read 将String 转换为数字:

Prelude> read "3" :: Int
3
Prelude> read "3" :: Double 
3.0

但是如何获取 Int 值的 String 表示形式?

【问题讨论】:

    标签: string haskell int casting


    【解决方案1】:

    read 的反义词是show。

    Prelude> show 3
    "3"
    
    Prelude> read $ show 3 :: Int
    3
    

    【讨论】:

    • @Lega:您可能会发现这很有用:haskell.org/hoogle/?hoogle=Int+-%3E+String。
    • @KennyTM 很多人会发现该链接很有用!单独的链接是 +1,但用于展示如何使用它...那是 +10 谢谢 :)
    • 请注意,一些组织/标准强烈反对使用“show”,因为它具有极端的多态性。一个特定于类型的函数(或者,最坏的情况是 show 的包装器)会很有帮助。
    • @JonWatte “可能”,而不是“会”。就这个问题的一般性而言,我认为您的建议不可行。
    • 有没有办法在不使用系统功能的情况下手动执行此操作?
    【解决方案2】:

    任何刚开始使用 Haskell 并尝试打印 Int 的人,请使用:

    module Lib
        ( someFunc
        ) where
    
    someFunc :: IO ()
    x = 123
    someFunc = putStrLn (show x)
    

    【讨论】:

    • Haskell 更惯用的是 putStrLn $ show x(使用右关联运算符 $)
    • @Arlind:作为尝试学习 Haskell 的人,我真的很欣赏这样的答案。目前我并不想成为一名 Haskell 专家。我只是想让简单的功能起作用并将结果显示到控制台。稍后我可以了解什么是“惯用语”,什么不是“惯用语”。感谢您帮助初学者:-)
    【解决方案3】:

    一个基于 Chuck 回答的例子:

    myIntToStr :: Int -> String
    myIntToStr x
        | x < 3     = show x ++ " is less than three"
        | otherwise = "normal"
    

    请注意,如果没有show,第三行将无法编译。

    【讨论】:

      【解决方案4】:

      你可以使用显示:

      show 3
      

      我要补充的是 show 的类型签名如下:

      show :: a -> String
      

      不仅可以输入Int,而且可以将很多值转换成字符串。

      例如:

      show [1,2,3] 
      

      这是一个参考:

      https://hackage.haskell.org/package/base-4.14.1.0/docs/GHC-Show.html#v:show

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多