如何在重构中抽象 `reg-sub`

How to abstract `reg-sub` in reframe

在我的代码中,有这样的重复:

(reg-sub
 :hello-john
 (fn [ db [ _ say-hi ]
   (str (get-in db [ say-hi ]) "hello John")
 )

(reg-sub
 :hello-jack
 (fn [ db [ _ say-hi ]
   (str (get-in db [ say-hi ]) "hello Jack")
 )

这种模式非常乏味,我尝试在 sub.cljs 中使用以下代码进行分解:

(for [ [x y]  [[:hello-john "hello John"] 
                [:hello-jack "hello Jack"]]  ]
 (reg-sub
   x
   (fn [ db [ _ say-hi ]
     (str (get-in db [ say-hi ]) y ))
)

但它并没有像预期的那样工作。感谢阅读本文感谢任何帮助:)

您的第二个代码块缺少结尾 "

另一件事是 for 是惰性的——它不会被自己评估。将其替换为 doseq.

最后,一件小事 - 不要使用 (get-in db [say-hi]),而是使用 (get db say-hi)。如果 say-hi 在您的情况下始终是关键字,则可以使用 (say-hi db).

为什么不

(reg-sub
 :say-hello
 (fn [ db [ _ person say-hi ]
   (str (get-in db [ say-hi ]) "hello " person)
 )