首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在let中使用#

如何在let中使用#
EN

Stack Overflow用户
提问于 2020-08-05 02:22:08
回答 3查看 55关注 0票数 0

以下是示例代码

代码语言:javascript
复制
(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按钮,我使用以下代码

代码语言:javascript
复制
(defn find-me 
   ([frame]
         (let [ btn (seesaw.core/select frame [:#me] )  ] (do btn)
         )
   )
)

它会导致错误,比如

在(REPL:2:1)上读取源时出现语法错误。阅读时的EOF,从第2行开始

(我猜:#me在宏方面有问题。)

为什么会导致错误,以及如何避免错误。

还有比(keyword "#me")更聪明的方式吗?

EN

回答 3

Stack Overflow用户

发布于 2020-08-05 06:45:35

#只在令牌的开头是特殊的,用于控制如何解析该令牌。作为变量名或关键字的一部分,它是完全有效的。如果我将它粘贴到repl中,你的代码就会崩溃,但如果我手动重新输入它,它就会正常工作。这强烈地告诉我,您可能意外地在函数中包含了一些非打印字符或其他奇怪的变体字符。

票数 1
EN

Stack Overflow用户

发布于 2020-08-05 02:51:43

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

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

票数 0
EN

Stack Overflow用户

发布于 2020-08-05 02:52:55

井号是Clojure中一种特殊的读取器控制字符,所以不能在文字关键字、变量名等中使用它。

您对(keyword "#me")的建议将会起作用,尽管将代码修改为只使用字符串"#me",或者完全消除对井号字符的需要可能会更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63252939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档