无法使用必需的命名空间 class

Cannot use a required namespaced class

我有:

(ns test-1.core
  (:require [goog.dom :as dom]
            [goog.ui.Popup :as popup]
            [goog.positioning.AbsolutePosition]
            [rum.core :as rum]))

现在我可以:

(dom/getElement "popup")

但由于我不明白的原因我不能这样做:

(popup. .....)

相反,我必须写:

(goog.ui.Popup. .....)

为什么?

如果您查看 goog.ui.Popupimplementation,您会发现它是 class。这意味着我们需要使用 :import.

而不是将其包含在 :require
(ns test-1.core
  (:require [goog.dom :as dom])
  (:import [goog.ui Popup]))

(Popup. (dom/getElement "popup"))

总的来说,对闭包 classes 和枚举使用 :import,对其他所有内容使用 :require