ClojureScript函数始终执行

ClojureScript函数始终执行,clojure,clojurescript,luminus,Clojure,Clojurescript,Luminus,我正在学习ClojureScript,我有两个函数可以更改“根应用程序”div中的内容: 由于“root app”div存在于该页面中,因此在中一切正常,但在中,我收到错误消息: 因为在那个页面中没有这样的div。这一切都很奇怪,因为ClojureScript似乎发现: (if (clojure.string/includes? current_url "about") 如果未打印console.log,则实际上为false 我的问题是:为什么函数mount components运行并发送

我正在学习ClojureScript,我有两个函数可以更改“根应用程序”div中的内容:

由于“root app”div存在于该页面中,因此在中一切正常,但在中,我收到错误消息:

因为在那个页面中没有这样的div。这一切都很奇怪,因为ClojureScript似乎发现:

 (if (clojure.string/includes? current_url "about")
如果未打印console.log,则实际上为false

我的问题是:为什么函数mount components运行并发送错误消息,即使条件if为false?奇怪的是console.log:

 (.log js/console (str "Whatever URL ->>>" js/window.location.href))   

不运行,但安装组件功能运行。我想我不理解ClojureScript工作方式中的“顺序”。

我不确定,但根据你的描述,我认为你所思考的逻辑和你实际测试的逻辑是不同的。if语句在URL中查找“about”一词。如果它在那里,那么它将打印控制台日志,即它将在那里等待。如果不存在,它将运行mount components函数,该函数将查找您所说的未包含在页面中的div ID,因此您将得到错误。mount组件是ELSE语句,因此在测试为false时执行

我不确定,但根据你的描述,我认为你所想的逻辑和你实际测试的逻辑不一样。if语句在URL中查找“about”一词。如果它在那里,那么它将打印控制台日志,即它将在那里等待。如果不存在,它将运行mount components函数,该函数将查找您所说的未包含在页面中的div ID,因此您将得到错误。mount组件是ELSE语句,因此在测试为false时执行

if表单的工作方式类似于
(if cond true branch false branch)
,因此执行
(mount component)
,因为它位于false分支中。签出,它只有一个真正的分支。

if表单的工作方式类似于
(if cond true branch false branch)
,因此您的
(挂载组件)
会被执行,因为它位于假分支中。签出,它只有一个真正的分支。

显然
content
为空。元素ID正确吗?这基本上是一个NPE。将
let
替换为
when let
,以便仅在找到元素时运行。请看,您(几乎)不应该在函数范围内使用
def
,这是您在
init中执行的操作函数。
def
在全局范围内创建一个var。用本地绑定代替
let
。它也应该是“Willkommen zu meim ekelhaften Blog”。显然
内容
为空。元素ID正确吗?这基本上是一个NPE。将
let
替换为
when let
,以便仅在找到元素时运行。请看,您(几乎)不应该在函数范围内使用
def
,这是您在
init中执行的操作函数。
def
在全局范围内创建一个var。用本地绑定代替
let
。也可能是“Willkommen zu meim ekelhaften博客”,这就是答案。if语句每个分支只接受一个表达式,没有隐式的
do
。如果你想有条件地做多项事情,那么你应该在
时使用
(有一个隐式的
do
),或者将多个语句包装在
do
中。这就是答案。if语句每个分支只接受一个表达式,没有隐式的
do
。如果您希望有条件地执行多项任务,则应在
时使用
(具有隐式的
do
)或将多个语句包装在
do
 (.log js/console (str "Whatever URL ->>>" js/window.location.href))