【问题标题】:Why doesn't `integer?` only succeed for things of type Integer?为什么 `integer?` 不只对 Integer 类型的东西成功?
【发布时间】:2022-12-19 14:27:55
【问题描述】:

似乎 integer? 可以成功...非整数?为什么这段代码不进行类型检查?

#lang typed/racket

(define x : Real 134)

(define y : Integer (cond [(integer? x) x]
                          [else (error "not an integer")]))

【问题讨论】:

    标签: typed-racket


    【解决方案1】:

    您完全正确,integer? 谓词不仅适用于 Integer 类型的事物,它也适用于不精确的实数,例如 3.0。您可能想使用谓词 exact-integer?,而不是:

    #lang typed/racket
    
    (define x : Real 134)
    
    (define y : Integer (cond [(exact-integer? x) x]
                              [else (error "not an integer")]))
    

    此代码类型检查并运行。

    nonnegative-integer?也是一样,改用exact-nonnegative-integer?

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 2018-07-29
      • 1970-01-01
      • 2020-01-26
      • 2012-08-05
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2017-04-03
      相关资源
      最近更新 更多