请在2024年Clojure调查!中分享您的想法。

欢迎!请参阅关于页面了解更多关于它是如何工作的信息。

0
Clojure

如果这是一个幼稚的问题,请见谅。我对Clojure还不够了解。

我有一个关于跨命名空间扩展协议的问题。

假设我有一个命名空间ns-a,在其中我使用协议扩展java String,添加一个名为myStringMethod的方法。

我该如何在另一个命名空间,比如ns-b中,使用此myStringMethod,以下是一个示例代码?

(let [hello "hello"] (. hello myStringMethod)) 

我是否需要导入命名空间ns-a,尽管我从不会使用任何来自命名空间ns-a的内容?编译器会扫描所有源代码以确保加载扩展吗?

谢谢。

1 答案

+1

在使用之前,您需要加载任何扩展协议的代码。

需要注意的是,您不会通过Java互操作(使用.)调用协议方法 - 这将直接尝试在String实例上调用方法(而实际上并不存在)。您应该像调用任何其他Clojure函数一样调用该函数。

(let [hello "hello"] (myStringMethod hello))
谢谢您关于调用Clojure协议函数的建议。

您说的“使用之前加载代码”对协议扩展是什么意思?

需要指定定义扩展的程序包名称吗?或者每个程序包都需要有自己的扩展代码副本?还是其他的方法?
使用 `require`
...