相关疑难解决方法(0)

在defrecord构造函数中未强制执行类型提示

我使用defrecord字段类型提示创建了一个类型.但是,我发现这些类型的提示没有在构造函数中强制执行,我可以用它们做一些奇怪的事情.请查看下面的代码段,例如:

user=> (defrecord Person [#^String name #^Integer age])
user.Person
user=> (seq (.getConstructors Person))
(#<Constructor public user.Person(java.lang.Object,java.lang.Object,
java.lang.Object,java.lang.Object)>
#<Constructor public user.Person(java.lang.Object,java.lang.Object)>)
user=> (Person. (Integer. 123) "abhinav")
#:user.Person{:name 123, :age "abhinav"}
Run Code Online (Sandbox Code Playgroud)

显示的构造函数签名与提供的类型提示不匹配(它们Object用于StringInteger),我能够构造具有错误字段类型的对象.

我的代码有问题还是Clojure中的错误?

我在Clojure 1.2.0-beta1上.

clojure type-hinting

9
推荐指数
2
解决办法
2473
查看次数

标签 统计

clojure ×1

type-hinting ×1