在 Clojure 中类型提示一个 nil 文字

Posted

技术标签:

【中文标题】在 Clojure 中类型提示一个 nil 文字【英文标题】:Type-hint a nil literal in Clojure 【发布时间】:2013-11-19 15:58:58 【问题描述】:

当传递的参数是文字 nil 时,如何对函数调用的参数进行类型提示?我遇到了一种情况,我试图用多个单参数构造函数代理一个 Java 类,例如:

public class MyClass 
  public MyClass(String a) ...
  public MyClass(List b) ...

我想为我的代理调用接受字符串参数的构造函数,但为该参数传递一个空值。简单地调用:

(proxy [MyClass] [nil] ...)

抛出异常,因为 Clojure 找到多个构造函数并且不知道要调用哪一个。但是尝试添加类型提示,如下所示:

(proxy [MyClass] [^String nil] ...)

抛出异常消息“元数据只能应用于 IMetas”。很公平 - 在阅读 nil 文字时,读者没有任何东西可以附加元数据。那么我该如何解决这个问题呢?我能够想出一个涉及let 的解决方案,但它似乎相当笨拙:

(let [NIL! nil]
  (proxy [MyClass] [^String NIL!] ...))

有没有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

很遗憾,没有,

我不知道有什么更好的方法。有时我在一个函数中调用proxy,然后调用它,虽然这相当于你使用let

【讨论】:

以上是关于在 Clojure 中类型提示一个 nil 文字的主要内容,如果未能解决你的问题,请参考以下文章

Clojure : 类型提示塔

Clojure 类型提示,无法解析类名 clojure.core$double

类型提示存储为clojure中的元数据?

Clojure 中函数的类型提示

尽管在 Clojure 中对 Java 构造函数有类型提示,但仍会出现反射警告

为啥 Clojure 成语更喜欢返回 nil 而不是像 Scheme 这样的空列表?