这是示例代码
(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
)
)
)
对于获取按钮,我使用这个
(defn find-me
([frame]
(let [ btn (seesaw.core/select frame [:#me] ) ] (do btn)
)
)
)
它会导致错误,比如
在(REPL:2:1(读取源时出现语法错误。读取时EOF,从第2行开始
(我想:#me是宏中的问题。(
为什么会出现错误,以及如何避免错误。
有比(keyword "#me")
更聪明的方法吗
#
仅在令牌的开头是特殊的,用于控制如何解析该令牌。作为变量名或关键字的一部分,它是完全有效的。如果我把你的代码粘贴到repl中,它就会中断,但如果我手动重新键入,它就会工作。这强烈地向我表明,您无意中在函数中包含了一些非打印字符或其他奇怪的变体字符。
不能使用#,因为它是一个调度字符。
#是一个特殊字符,它告诉Clojure阅读器(获取Clojure源并"读取"它作为Clojure数据的组件(如何解释下一个字符
英镑字符(又名octhorpe(是Clojure中一个特殊的读取器控制字符,因此您不能在文字关键字、变量名等中使用它。
您对(keyword "#me")
的建议将起作用,尽管最好修改您的代码,只使用字符串"#me"
,或者完全消除对磅字符的需要。