1

我只是在尝试 Om,从基础教程中学习。

我的程序数据在一个原子中:app-state。

如果我将一个序列放入该原子中,例如。

(defonce app-state (atom {:things [1 2 3 4]}))

然后稍后,在我的渲染中,我可以得到一个光标

(let [things (:things data)] ... )

并映射它:

(map #(* % %) things)

但是,如果我有一个可以返回序列的方法的 defrecord:

(defrecord ThingCollection [xs]
    IThingCollection
    (getSeq [this] ... ) )

并将其放入应用程序状态

(defonce app-state (atom {:things (->ThingCollection [1 2 3 4]})))

...

(let [things (:things data)] ... )

我不能这样做:

(map #(* % %) (.getSeq things))

它只是抛出一个错误,说游标没有方法 .getSeq

那讲得通。但是,我怎样才能真正获得光标内的 ThingCollection 对象呢?我找不到任何这样的例子。我尝试过的任何东西似乎都没有给我。

4

1 回答 1

0

试试(getSeq things)

几点注意事项:

  1. 更喜欢 kebab-caseget-seq而不是getSeq
  2. ->ThingCollection不给出对象,它只是给出一个记录。这仍然是不可变的,大致只是一个“命名映射”。
  3. 一旦你意识到第 2 点,使用.methodcall 应该看起来是错误的,因为那是为了处理 JavaScript 对象。
于 2015-10-11T03:57:21.247 回答