我正在读O'Reilly的Clojure Programming book.
我找到了头部保留的例子.第一个例子保留对d(我推测)的引用,因此它不会收集垃圾:
(let [[t d] (split-with #(< % 12) (range 1e8))]
[(count d) (count t)])
;= #<OutOfMemoryError java.lang.OutOfMemoryError: Java heap space>
Run Code Online (Sandbox Code Playgroud)
虽然第二个例子不保留它,但它没有问题:
(let [[t d] (split-with #(< % 12) (range 1e8))]
[(count t) (count d)])
;= [12 99999988]
Run Code Online (Sandbox Code Playgroud)
我没有得到的是在哪种情况下保留了什么以及为什么.如果我试着回来[(count d)],就像这样:
(let [[t d] (split-with #(< % 12) (range 1e8))]
[(count d)])
Run Code Online (Sandbox Code Playgroud)
它似乎创造了相同的内存问题.
此外,我记得count在每种情况下都会实现/评估一个序列.所以,我需要澄清一下.
如果我(count t)首先尝试返回,那么如果我根本不返回它会如何更快/更高效?在哪种情况下保留了什么?为什么?
我想在我的Django管理界面中订购模型.默认值是应用内模型的字母顺序.
我想避免创建额外的包等等,或者不得不改变Django本身.
这可以通过覆盖Django管理模板或其他一些轻量级方式来完成吗?
编辑:
我不想订购最终产品,比如待办事项列表.
我想在admin的索引页面中订购不同的模型.例如todos来到汽车前.
我正在读一本关于clojure的书,我来的是一个我不完全理解的例子.
这是repl中的代码:
user=> (repeatedly 10 (rand-int 10))
ClassCastException java.lang.Integer cannot be cast to clojure.lang.IFn clojure.core/repeatedly/fn--4705 (core.clj:4642)
user=> (repeatedly 10 (partial rand-int 10))
(5 0 5 5 2 4 8 8 0 0)
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么partial需要这里,以及它如何适合partial定义,repeatedly定义和语法.部分......
Takes a function f and fewer than the normal arguments to f, and
returns a fn that takes a variable number of additional args. When
called, the returned function calls f with args + additional args.
Run Code Online (Sandbox Code Playgroud)
那么它如何适应?
我一直在研究Mezzanine已有一段时间了,但是除了基本的安装之外我还没有找到很多教程.夹层文档包含有关如何自定义页面模型和添加新内容类型的信息.
但是,我想要做的是以不同的方式利用现有的内容类型(页面,博客帖子).
例如,我希望自定义"博客列表"页面超出基本默认博客列表.
我如何在管理员中创建第二个博客页面?如何在不触及默认博客列表模板的情况下将其模板设置为我的自定义模板?
因此,我如何拥有2个不同的博客列表页面?
QUIC 和 HTTP/3 多路复用(通过 UDP)与 HTTP/2(通过 TCP)带来的有何不同?
在yii控制器中编写访问控制规则时,为规则设置的可能参数是"操作" - 设置规则适用的操作; '用户','角色'等
现在,yii指南(pdf)和引用(我有chm文件)都说可以为规则应该应用的控制器设置控制器ID.
现在,如果我们已经将这些规则放在控制器类/文件中,那么我们如何能够将其他控制器(当前的控制器除外)作为参数放在这里,这意味着我们在这里提到的其他控制器如何 - 如何知道有适用于它的规则,因为它是用完全其他控制器类/文件编写的?
如果控制器是在一个完全不同的控制器之外写的,那么控制器如何知道它提到它的规则呢?
阅读Hartl的教程,在清单10.42中的microposts控制器中,我们有
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
@feed_items = []
render 'static_pages/home'
end
end
Run Code Online (Sandbox Code Playgroud)
因此在else分支中,我们需要将其设置为空,@feed_items因为渲染自身不提供变量。
我的问题是-为什么redirect_to root_url不像在if分支中那样使用,那样该变量将由控制器动作提供?
我正在阅读关于休息与下一个 clojure的解释.据我了解,它分解为next评估/实现序列的尾部,知道它应该返回nil还是不rest返回,同时总是返回序列,因此它更加懒惰.
然而,我不明白的是:两个功能都需要知道尾部有什么东西.一个将返回nil如果有一无所有,其他人会返回().
所以基本上,他们都需要检查/评估剩下的东西.甚至rest,返回(),需要知道它不会返回说(2)例如.
所以甚至rest需要做评估.
但解释却恰恰相反.这只是next评估,但rest不是,因此更懒惰.
谁能解释一下?