以下是示例代码
(def showscp
( let [ cf (seesaw.core/frame :title "cframe")]
(do
(seesaw.core/config! cf :content (seesaw.core/button :id :me :text "btn" ))
(.setSize cf 300 300)
(seesaw.core/show! cf)
cf
)
)
)对于get按钮,我使用以下代码
(defn find-me
([frame]
(let [ btn (seesaw.core/select frame [:#me] ) ] (do btn)
)
)
)它会导致错误,比如
在(REPL:2:1)上读取源时出现语法错误。阅读时的EOF,从第2行开始
(我猜:#me在宏方面有问题。)
为什么会导致错误,以及如何避免错误。
还有比(keyword "#me")更聪明的方式吗?
发布于 2020-08-05 06:45:35
#只在令牌的开头是特殊的,用于控制如何解析该令牌。作为变量名或关键字的一部分,它是完全有效的。如果我将它粘贴到repl中,你的代码就会崩溃,但如果我手动重新输入它,它就会正常工作。这强烈地告诉我,您可能意外地在函数中包含了一些非打印字符或其他奇怪的变体字符。
发布于 2020-08-05 02:51:43
您不能使用#,因为它是a dispatch character。
是一个特殊字符,它告诉Clojure读取器(获取Clojure源代码并将其“读取”为Clojure数据的组件)如何解释下一个字符
发布于 2020-08-05 02:52:55
井号是Clojure中一种特殊的读取器控制字符,所以不能在文字关键字、变量名等中使用它。
您对(keyword "#me")的建议将会起作用,尽管将代码修改为只使用字符串"#me",或者完全消除对井号字符的需要可能会更好。
https://stackoverflow.com/questions/63252939
复制相似问题