Clojure控制台吐出';无符号位右移';简单HelloWorld上的警告

Clojure控制台吐出';无符号位右移';简单HelloWorld上的警告,clojure,leiningen,clojurescript,lighttable,Clojure,Leiningen,Clojurescript,Lighttable,今天我和Clojure一起迈出了我的第一步,我立刻遇到了第一个令人困惑的障碍 我构建了一个新的Leiningen(2.5.1)项目,只想运行默认代码,即: (ns wavescript.core (:gen-class)) (defn -main "I don't do a whole lot ... yet." [& args] (println "Hello, World!")) 问题在于Lighttable(0.7.2)控制台显示: 警告:无符号位右移已指: #

今天我和Clojure一起迈出了我的第一步,我立刻遇到了第一个令人困惑的障碍

我构建了一个新的Leiningen(2.5.1)项目,只想运行默认代码,即:

(ns wavescript.core
  (:gen-class))

(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (println "Hello, World!"))
问题在于Lighttable(0.7.2)控制台显示:

警告:无符号位右移已指: #'clojure.core/unsigned-bit-shift-right在名称空间中:cljs.core, 替换为:#'cljs.core/unsigned-bit-shift-right


我在谷歌上找到了一些条目,但没有一条让我走得更远。这是怎么回事

这是由于在clojure.core命名空间以及cljs.core中发现符号无符号位右移造成的。clojure.core名称空间在cljs.core之前编译/加载,新符号的引入引发了警告。从名称空间看,您正在编写clojurescript。如果您在第2147行查看此文件,您将看到以下表格:

(defn unsigned-bit-shift-right
  "Bitwise shift right with zero fill"
  [x n] (cljs.core/unsigned-bit-shift-right x n))
在cljs.core命名空间中。显然,lighttable同时导入了clojure.core和clj.core

老实说,我甚至不知道cljs实现是如何工作的,因为它完全是自参考的。此外,还有从第451行开始的不带前缀的无符号位右移用法,因此它们必须使用clojure.core实现。奇怪的上述表格在所有之前的使用之后出现。可以安全地说符号可以被排除。事实上,这可能值得修补

要解决这个问题,您可能需要尝试显式地声明名称空间导入并排除该导入。该函数提供了这一点

因此,您将有一个如下所示的名称空间

(ns my.namespace.hello-world
  [:require 
    [cljs.core :exclude [unsigned-bit-shift-right]]])
clojure.core实现如下所示:

(defn unsigned-bit-shift-right
  "Bitwise shift right, without sign-extension."
  {:inline (fn [x n] `(. clojure.lang.Numbers (unsignedShiftRight ~x ~n)))
   :added "1.6"}
  [x n] (. clojure.lang.Numbers unsignedShiftRight x n))
或者,由于它们正在包装功能,可能cljs.core的设计不需要公开clojure.core。如果是这种情况,那么排除clojure.core,看看您的代码是否能正常工作

事实上,从cljs.core名称空间来看:

(ns cljs.core
  (:refer-clojure :exclude [-> ->> .. amap and areduce alength aclone assert binding bound-fn case comment cond condp
                            declare definline definterface defmethod defmulti defn defn- defonce
                            defprotocol defrecord defstruct deftype delay destructure doseq dosync dotimes doto
                            extend-protocol extend-type fn for future gen-class gen-interface
                            if-let if-not import io! lazy-cat lazy-seq let letfn locking loop
                            memfn ns or proxy proxy-super pvalues refer-clojure reify sync time
                            when when-first when-let when-not while with-bindings with-in-str
                            with-loading-context with-local-vars with-open with-out-str with-precision with-redefs
                            satisfies? identical? true? false? number? nil? instance? symbol? keyword? string? str get
                            make-array vector list hash-map array-map hash-set

                            aget aset
                            + - * / < <= > >= == zero? pos? neg? inc dec max min mod
                            byte char short int long float double
                            unchecked-byte unchecked-char unchecked-short unchecked-int
                            unchecked-long unchecked-float unchecked-double
                            unchecked-add unchecked-add-int unchecked-dec unchecked-dec-int
                            unchecked-divide unchecked-divide-int unchecked-inc unchecked-inc-int
                            unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int
                            unchecked-subtract unchecked-subtract-int unchecked-remainder-int
                            unsigned-bit-shift-right

                            bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set
                            bit-test bit-shift-left bit-shift-right bit-xor

                            cond-> cond->> as-> some-> some->>

                            if-some when-some test ns-interns var vswap!])
(ns cljs.core
(:参考clojure:exclude[->->..amap和arenegth aclone assert binding bound fn case comment cond
声明definline definterface defmethod defmulti defn defn-defonce
defprotocol defrecord defstruct deftype delay destructure doseq dosync dotimes doto
扩展协议扩展类型fn,用于将来的gen类gen接口
if let if not import io!lazy cat lazy seq let letfn锁定循环
memfn ns或代理超级pvalues指clojure具体化同步时间
当第一次在str中使用绑定时,当不使用时
使用带有open with out str的本地变量加载上下文,使用redefs精确加载
满足?相同?真?假?数字?零?实例?符号?关键字?字符串?str get
设置数组向量列表哈希映射数组映射哈希集
阿吉特阿塞特酒店
+-*/<>==零位置负包括十二月最大最小模式
字节字符短整型长浮点双精度
未选中字节未选中字符未选中短未选中整数
未选中长未选中浮点未选中双精度
未选中添加未选中添加整数未选中dec未选中dec整数
未选中的分割未选中的分割整数未选中的合并未选中的合并整数
未选中的乘未选中的乘整数未选中的否定未选中的否定整数
未选中减去未选中减去整数未选中余数整数
无符号位右移
位与位和非位清除位翻转位非位或位设置
位测试位左移位右移位异或
cond->cond->as->some->some->some->>
如果有些测试ns实习生var vswap!])

您可以看到,无符号位右移应该从命名空间中排除。因此,您需要排除clojure.core来解决此问题。

您可能需要将clojurescript和lighttable添加到标记中,以便将其放入正确的容器中。这是clojurescript/lighttable问题,而不是clojure问题。因此,cljs.core是其中的一部分关于clojurescript…Hm不知道我正在为此构建一个项目。也许这就是为什么,
$lein new app foo
会使它成为clojurescript而不是clojure?lien new应该生成一个基础clojure项目,除非你在全局配置文件中进行了修改。回答不错,我想这会引起一些注意!不过看起来我完全是无意中创建了Clojurescript项目,这次我将使用Leiningen默认设置进行尝试…这是一个很好的问题分析,很好地演示了如何剖析问题并使用源代码了解可能发生的情况。感谢Tim X,我对此表示感谢。