Clojure 从.cljc调用到.clj的值始终为null

Clojure 从.cljc调用到.clj的值始终为null,clojure,clojurescript,Clojure,Clojurescript,我的common.cljc文件如下所示: (ns example.common #?(:cljs (:require [goog.dom :as gdom]) ) ) #?(:cljs (enable-console-print!)) (defn mobile? [] #?(:cljs (def hvpsize (.. (gdom/getViewportSize) -height))) #?(:cl

我的common.cljc文件如下所示:

   (ns example.common
     #?(:cljs
    (:require [goog.dom :as gdom])
       )
    )

    #?(:cljs (enable-console-print!))

   (defn mobile? []
        #?(:cljs (def hvpsize (.. (gdom/getViewportSize) -height))) 
        #?(:cljs (def wvpsize (.. (gdom/getViewportSize) -width))) 
        #?(:cljs (if (<= (/ wvpsize hvpsize) 1) true false))
   )

   (def mobile-value (mobile?))

   (println "mobile-value inside .cljc")
   (println mobile-value)
     (ns example.routes 
        (:gen-class)
        (:use compojure.core
               example.views
               example.common
               [hiccup.middleware :only (wrap-base-url)])
        )

        (use '[ring.util.response :only [response]])
        (use '[ring.adapter.jetty :only [run-jetty]])
        (require '[compojure.route :as route])

        (defn -main
          "I don't do a whole lot ... yet."
          [& args]
          (println "Hello, World!"))

        (defn d-or-m-version [] 
           (.println System/out "Inside d-or-m-version")
           (.println System/out mobile-value)
           (if mobile-value (root-page-mobile) (root-page-desktop))
           )

        (defroutes main-routes 
           (GET "/" [] (d-or-m-version))
           (route/not-found "404"))

        (defonce server (run-jetty #'main-routes {:port 8080 :join? false}))
mobile value
在.cljc文件中重新加载页面时,甚至在我拥有的单独的.cljs文件中,计算结果都是正确的

问题是当在routes.clj中计算移动值时,它只返回null。因此,
d-or-v-version
中的if语句不会从单独的views.clj文件调用正确的hiccup html


我假设
mobile value
返回null,因为routes.clj在common.cljc之前运行,而
mobile value
没有值。然而,我不知道如何解决这个问题,任何帮助都将不胜感激

从Clojure调用时,它的计算结果为
nil
,因为它在Clojure中是一个空函数。
#?(:cljs
reader conditional告诉Clojure编译器忽略此表单,因为它应该仅由Clojurescript编译器计算


由于Clojure编译器不存在该函数中的所有形式,因此该函数为空,当从Clojure调用时,它的计算结果将始终为
nil

,因为它是Clojure中的空函数?(:cljs
reader conditional告诉Clojure编译器忽略此表单,因为它应该仅由Clojurescript编译器计算


由于Clojure编译器不存在该函数中的所有形式,因此该函数为空,并且它的计算结果将始终为
nil

啊,这很有意义,感谢您的响应。我是否可以在
mobile?
中以Clojure编译器可以计算的方式捕获该布尔值?或者其他方式为了解决这个问题,我似乎能够判断用户是否在手机上的唯一方法是通过cljs使用js LIB,但我的所有路线都必须在clj中,因此让他们互相交谈似乎是不可避免的(但也是常见的)问题。我认为您必须让客户端告诉服务器它是否是移动的。也就是说,这不是您的服务器的编译时问题。但是当客户端最终必须告诉服务器“嘿,为移动上的根路径页面加载此特定的html/css”如何在不遇到此问题的情况下从客户端到服务器交换该值?抱歉,我可能误解了一些基本信息。您可以让moble和桌面版本在不同的URL上发出请求,或发送不同的参数,或检查浏览器标题,有许多方法可以做到这一点。啊,这很有意义,谢谢您的回复ponse.我是否可以在
mobile中捕获该布尔值?
以clojure编译器可以对其进行评估的方式?或者可能是解决该问题的另一种方式?我似乎能够判断用户是否在移动中的唯一方法是通过cljs使用js LIB,但我的所有路由都必须在clj中,因此让他们相互交谈另一个似乎是不可避免的(但也是常见的)问题。我认为您必须让客户端告诉服务器它是否是移动的。也就是说,这不是您的服务器在编译时的问题。但当客户端最终必须告诉服务器“嘿,为移动上的根路径页面加载此特定的html/css”如何在不遇到此问题的情况下将该值从客户端交换到服务器?抱歉,我可能误解了一些基本信息。您可以让移动版和桌面版在不同的URL上发出请求,或发送不同的参数,或检查浏览器头,有许多方法可以做到这一点。