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

标签 parameters clojure namespaces function

我有两个命名空间:第一个是 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/

相关文章:

javascript - 我可以沙箱第三方 JavaScript 来保护全局命名空间吗?

C++ 命名空间、内部类和运算符解析

Java Netbeans 直观的参数名称

java - 如何让 jar 应用程序在退出前等待 "return"键? (Clojure)

c++ - 存储/调用函数调用的先前参数

java - 使用 Clojure/Java 为 X.Org 平台编写 WM 所需的技能和知识

command-line - 编写 Clojure 代码以重复从控制台读取行的惯用方法?

c# - ObjectDataSourceControl 无法在导入的命名空间中找到类型

C - 以文本作为参数

c++ - 使用 C++ 读取标准输入并连接内部字符串