这是示例代码
(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")
答案 0 :(得分:1)
#
仅在令牌的开头是特殊的,以控制该令牌的解析方式。作为变量名或关键字的一部分,它是完全有效的。如果将其粘贴到一个repl中,则您的代码会中断,但是如果我手动重新键入,则该代码会起作用。这向我强烈暗示,您不小心将一些非打印字符或其他怪异的变体字符添加到了函数中。
答案 1 :(得分:0)
您不能使用#,因为它是a dispatch character。
#是一个特殊字符,它告诉Clojure读取器(获取Clojure源并将其“读取”为Clojure数据的组件)如何解释下一个字符
答案 2 :(得分:0)
在Clojure中,井字字符(又称八丁字)是特殊的读者控制字符,因此不能在文字关键字,变量名等中使用它。
您的建议(keyword "#me")
是可行的,尽管最好修改代码以仅使用字符串"#me"
,或者完全不需要英镑字符。