如何在让中使用#

时间:2020-08-04 18:22:07

标签: clojure seesaw

这是示例代码

(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")

更聪明的方法

3 个答案:

答案 0 :(得分:1)

#仅在令牌的开头是特殊的,以控制该令牌的解析方式。作为变量名或关键字的一部分,它是完全有效的。如果将其粘贴到一个repl中,则您的代码会中断,但是如果我手动重新键入,则该代码会起作用。这向我强烈暗示,您不小心将一些非打印字符或其他怪异的变体字符添加到了函数中。

答案 1 :(得分:0)

您不能使用#,因为它是a dispatch character

#是一个特殊字符,它告诉Clojure读取器(获取Clojure源并将其“读取”为Clojure数据的组件)如何解释下一个字符

答案 2 :(得分:0)

在Clojure中,井字字符(又称八丁字)是特殊的读者控制字符,因此不能在文字关键字,变量名等中使用它。

您的建议(keyword "#me")是可行的,尽管最好修改代码以仅使用字符串"#me",或者完全不需要英镑字符。