小编Yur*_*rev的帖子

在MongoDB中将Guid存储为String有什么缺点?

应用程序在Mongo中保留Guid字段,最终存储为BinData:

"_id" : new BinData(3, "WBAc3FDBDU+Zh/cBQFPc3Q==")
Run Code Online (Sandbox Code Playgroud)

在这种情况下的优点是紧凑性,当需要对应用程序进行故障排除时会出现缺点.Guids通过URL传递,并且在转到Mongo控制台时不断将它们转换为BinData有点痛苦.

除了增加尺寸外,将Guid存储为字符串有什么缺点?一个优点是易于故障排除:

"_id" : "3c901cac-5b90-4a09-896c-00e4779a9199"
Run Code Online (Sandbox Code Playgroud)

这是C#中持久化实体的原型:

class Thing
{
    [BsonIgnore]
    public Guid Id { get; set; }

    [BsonId]
    public string DontUseInAppMongoId
    {
        get { return Id.ToString(); }
        set { Id = Guid.Parse(value); }
    }
}
Run Code Online (Sandbox Code Playgroud)

mongodb mongodb-.net-driver

11
推荐指数
2
解决办法
6561
查看次数

何时使用纯递归以及何时使用循环/重复?

"纯粹的递归"是一个虚构的术语,请原谅.

以下是使用两种不同递归方法的两个示例.一个用户的使用指南是什么?

(defn take-while
  "Returns a lazy sequence of successive items from coll while
  (pred item) returns true. pred must be free of side-effects."
  {:added "1.0"
   :static true}
  [pred coll]
  (lazy-seq
   (when-let [s (seq coll)]
       (when (pred (first s))
         (cons (first s) (take-while pred (rest s)))))))

(defn take-last
  "Returns a seq of the last n items in coll.  Depending on the type
  of coll may be no better than linear time.  For vectors, see also subvec."
  {:added "1.1"
   :static true} …
Run Code Online (Sandbox Code Playgroud)

recursion clojure

8
推荐指数
1
解决办法
1136
查看次数

列表中的唯一列表

给定一个列表,我需要返回一个唯一项列表.我想看看是否有比我提出的更多Pythonic方式:

def unique_lists(l):
    m = {}
    for x in l:
        m[x] = (m[x] if m.get(x) != None else []) + [x]
    return [x for x in m.values()]    

print(unique_lists([1,2,2,3,4,5,5,5,6,7,8,8,9]))
Run Code Online (Sandbox Code Playgroud)

输出:

[[1], [2, 2], [3], [4], [5, 5, 5], [6], [7], [8, 8], [9]]
Run Code Online (Sandbox Code Playgroud)

python

7
推荐指数
1
解决办法
324
查看次数

如何从具有副作用的函数中获取返回值的集合?

寻找一种从具有副作用的函数生成返回值集合的方法,以便我可以将其提供给take-while.

(defn function-with-side-effects [n]
  (if (> n 10) false (do (perform-io n) true)))

(defn call-function-with-side-effects []
  (take-while true (? (iterate inc 0) ?)))
Run Code Online (Sandbox Code Playgroud)

UPDATE

以下是Jan回答后的内容:

(defn function-with-side-effects [n]
  (if (> n 10) false (do (println n) true)))

(defn call-function-with-side-effects []
  (take-while true? (map function-with-side-effects (iterate inc 0))))

(deftest test-function-with-side-effects
  (call-function-with-side-effects))
Run Code Online (Sandbox Code Playgroud)

运行测试不会打印任何内容.使用doall结果内存不足异常.

clojure

4
推荐指数
1
解决办法
131
查看次数

测试返回布尔值的函数

我可能有一个最简单的测试失败了Clojure新手的相当混乱的消息.

(ns leiningen.booltest
  (:use clojure.test))

(with-test
  (defn bool-function [] 
    (true))

  (is (= (bool-function) true))
)

ERROR in (bool-function) (booltest.clj:10)
expected: (= (bool-function) true)
  actual: java.lang.ClassCastException: java.lang.Boolean cannot be cast to clojure.lang.IFn
Run Code Online (Sandbox Code Playgroud)

clojure

3
推荐指数
1
解决办法
1251
查看次数

如何将已定义的函数函数转换为匿名函数

我想将一个已定义的函数转换为匿名函数.我怎么做?以下函数返回序列中的最后一个元素:

(defn lastt [l]
    (cond
        (nil? (next l)) l
        :else
            (lastt (next l))))
Run Code Online (Sandbox Code Playgroud)

如何将其变成fn表格?

PS:我知道last功能,这只是一个练习.

clojure

2
推荐指数
2
解决办法
125
查看次数