【问题标题】:Clojure reader literal for float?浮动的 Clojure 阅读器文字?
【发布时间】:2015-09-26 07:41:37
【问题描述】:

我想知道为什么浮点数没有 clojure reader 文字。比如:

1f

我找到了this,但没有任何回应。 clojure 文档也没有提到一个。是否没有计划添加它,如果没有,这背后的理由是什么?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    事实上,也没有针对 32 位精度整数的阅读器文字。

    (class 1)
    ; => java.lang.Long
    
    (class 1.0)
    ; => java.lang.Double
    

    我的猜测是这是一个自以为是的选择。 32 位是如此 20 世纪,是时候继续前进了。但是您仍然可以强制转换为 32 位类型(也可以转换为 short/byte),正如 @amalloy 所展示的那样。

    【讨论】:

      【解决方案2】:

      如果我需要写一个真正的浮点数,我通常只是确保它有一个小数点。 1.01

      【讨论】:

      • 我的意思是写这个作为评论,而不是答案,但它确实存在。愚蠢的触摸屏。
      【解决方案3】:

      Clojure 支持强制转换为定义 herehere 的 float 类型

      (def f1 (float 1))
      

      【讨论】:

      • 这并不能解释为什么没有办法编写不需要强制的字面浮点数(单精度)。或者有吗?
      • 你也可以定义一个带标签的文字,甚至在代码中使用#=(java.lang.Float/parseFloat "1")(不是在edn中)。
      【解决方案4】:

      除了@omiel 的答案,如果您更喜欢更简洁的语法,您可以写1. 来获得浮点数:

      (class 1.)
      ; => java.lang.Double
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-19
        • 2015-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多