foo
的类型注释应该是什么?
(define (foo)
(println "hello"))
我尝试了这些,但没有一个起作用:
(: foo (-> () ()))
(: foo (-> Void Void))
答案 0 :(得分:3)
在这种情况下,Typed Racket可以推断出类型。运行此程序:
#lang typed/racket
(define (foo)
(println "hello"))
然后在REPL中可以编写
> foo
- : (-> Void)
#<procedure:foo>
或
> (:print-type foo)
(-> Void)
查看foo的类型为(-> Void)
。
也就是说,它是没有参数的函数,它返回类型为Void
的值(即,它返回#<void>
。
最终程序变为:
#lang typed/racket
(: foo : (-> Void))
(define (foo)
(println "hello"))
答案 1 :(得分:3)
类型(-> Void Void)
用于接受void
并返回void
的函数。您的foo
函数,不接受任何参数,并返回一个void
。因此,您想要的类型实际上是:
(: foo (-> Void))
(define (foo)
(println "hello"))
作为旁注:
如果您想将foo
修改为类型(-> Void Void)
,则可以执行以下操作:
(define (foo _)
(print "Don't do this though"))
至:
(: foo (-> () ()))
这在语法上是无效的。