gpt4 book ai didi

parameters - 如何从另一个 ns 设置一个 ns 中的值?

转载 作者:行者123 更新时间:2023-12-04 16:58:04 27 4
gpt4 key购买 nike

我有两个命名空间:第一个是 clojuresque java 中的 gui,第二个是常规 clojure 中的 gui。用户在 gui 中输入值;这些需要在非 gui ns 中“传递”到“设置”值。我读过在 defn 中使用 def 是不好的做法,即使它有效。在我寻找解决这个小问题的过程中,我找到了 intern 函数。实习生是可接受的解决方案还是我应该使用其他方法?

最佳答案

是的,正如另一个答案所指出的,原子是保持可变状态的最佳选择。

创建一个原子,如:

(定义我的状态(原子 1))

(取消引用我的状态)
=> 1

;; @ 扩展为 deref 调用
@我的状态
=> 1

现在可以使用交换更新它:

(交换!我的状态(fn [旧值] 2)
@我的状态
=> 2

您可以在可从 Java 调用的命名空间中使用它:

(ns foo.NonGUI
(:gen-class
:name foo.NonGUI
:methods [#^{:static true} [setMyState [int] int]]))

(定义我的状态(原子))

(defn -setMyState
“将我的状态设置为新值”
[新值]
(交换!我的状态(fn [旧值] 新值))

在编译它并在 java 类路径上获取已编译的类文件后,您应该能够从 Java 使用这个命名空间:

导入 foo.NonGUI;

公共(public)课主要{

公共(public)静态无效主(字符串 [] args){
NonGUI.setMyState(4);
}
}

Calling clojure from java有关 Java 互操作的更多信息。

关于parameters - 如何从另一个 ns 设置一个 ns 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15405732/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com