我正在尝试将一些普通的球拍代码移植到打字/球拍(Ubuntu 12.04.5上的6.1)。到目前为止遇到的问题之一是equal-hash-code
返回的类型为Integer
,尽管文档声明fixnum?
。实际上,fixnum?
在给出#t
的结果时报告(equal-hash-code #"somebytes")
,但类型为Integer
。因此,当我尝试将哈希码存储为类型Fixnum
时,我收到错误。代码,
(define: foo : Fixnum (equal-hash-code #"somebytes"))
触发有问题的错误。将equal-hash-code
的结果转换为Fixnum
可以解决错误,但这表明我每次计算哈希码时都需要执行此转换。 (此外,无论值得什么,投射值仍然报告为- : Integer [more precisely: Fixnum]
。)
我担心我遗漏了一些基本的东西。有希望返回fixnum的函数应该要求将其结果强制转换为fixnum,这似乎很奇怪。
答案 0 :(得分:1)
来自the Typed Racket source的一些挖掘:
[equal-hash-code (-poly (a) (-> a -Integer))]
因此,文档说谎了当前的行为。我认为值得开一个问题。
要扩展我的评论,您需要使用Fixnums吗?因为他们只是一种更具体的整数类型(即使你已经知道这个,也把这张图片放在这里):
我想你可以逃避使用整数。