代码之家  ›  专栏  ›  技术社区  ›  Reut Sharabani

选择具有默认值的键

  •  0
  • Reut Sharabani  · 技术社区  · 6 年前

    有类似的功能吗 select-keys 但是对于缺少键的默认值呢?

    我问的原因是我在使用 korma 查询数据库。我发现了一个错误 选择键 当它没有匹配项时是不直观的。

    例子:

    (delete t
      (where
        (select-keys {:k1 "v1" :k2 "v2"} [:k1])))
    

    等同于:

    (delete t
      (where {:k1 "v1"}))
    

    它通过Korma翻译成:

    delete from t where k1='v1'
    

    很好。 选择键 只创建所需的查询映射。

    但是 :

    (delete t
      (where
        (select-keys {:k2 "v2"} [:k1])))
    

    等同于:

    (delete t
      (where {}))
    

    它通过Korma翻译成:

    delete from t
    

    这将删除我的整个表 t :(

    我想用 (merge defaults (select-keys ...)) 或者创建一个函数 select-keys-with-default 但是我觉得 (get m :blah "default") 可能有一些内置的东西我不见了。

    浏览文档或提供的相关功能时,没有显示任何有用的现成功能。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Michiel Borkent    6 年前

    当选择为空时,您可能根本不想执行查询。所以像这样的事情可能会发生:

    (when-let [selection (not-empty (select-keys ...))]
      (delete t (where selection)))