ForkJoinPool的异步模式是什么意思?Javadoc提到它使队列(它是每线程队列吗?)FIFO而不是LIFO.这在实践中意味着什么?
如何为MacVim添加西班牙语拼写检查程序?
我读到这是一个有用的链接,但显然它不起作用......我该怎么办?
Java 8带来了Stream接口,并且可以方便地对Java集合(以及可以转换为流的其他东西)进行map/filter/reduce操作.
我发现在与生成它们的Java API进行互操作时,Clojure使用的流程很笨拙且冗长.
比较 - Java:
Pattern.compile("\\s+").splitAsStream("one two three")
.filter(s -> !s.contains("o"))
.map(String::toUpperCase)
.findFirst()
.orElse(null); // => "THREE"
Run Code Online (Sandbox Code Playgroud)
Clojure,尝试使用相同的API:
(.. (.splitAsStream #"\s+" "one two three")
(filter
(reify java.util.function.Predicate
(test [this value] (not (.contains value "o")))))
(map
(reify java.util.function.Function
(apply [this value] (.toUpperCase value))))
(findFirst)
(orElse nil)) ; => "THREE"
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法在Clojure中使用基于流的Java API?是否有可能把一个流转换为序列,并使用Clojure的自身转型的功能,如remove,partition,take?
我根本无法理解文档.
我想要一个有序的地图"xxx",它根据值对地图进行排序.我怎么做?
谢谢.
Vim脚本有一些非常基本的函数编程工具.
它有map()和filter(),但据我所知它缺乏一个reduce()功能." Reduce "将值集合减少为单个值.
有没有办法reduce()在Vim脚本中以某种方式创建或模拟它?是否可以在Vim脚本表达式中减少值列表而不编写显式循环?举个例子,有没有办法减少加法运算的前五个正整数,就像函数式语言课程一样?
在JavaScript中:
[1, 2, 3, 4, 5].reduce(function(x, y) { return x + y; });
15
Run Code Online (Sandbox Code Playgroud)
在Clojure中:
(reduce + (range 1 (inc 5)))
15
Run Code Online (Sandbox Code Playgroud)
在Haskell:
foldl (+) 0 [1..5]
15
Run Code Online (Sandbox Code Playgroud)
在J:
+/>:i.5
15
Run Code Online (Sandbox Code Playgroud)
在Vim脚本中:...?
我知道在STM事务中放置具有副作用的函数通常是不好的做法,因为它们可能被重试并多次调用.
然而,我发现你可以使用代理来确保只有在事务成功完成后才能执行副作用.
例如
(dosync
// transactional stuff
(send some-agent #(function-with-side-effects params))
// more transactional stuff
)
Run Code Online (Sandbox Code Playgroud)
这是好习惯吗?
有哪些优点/缺点/陷阱?
如果这是不可能的,处理从UTF-8编码的POD派生的手册页的最佳做法是什么?
要在POD中使用Unicode,要做的第一件事就是使用该指令
=encoding UTF-8
Run Code Online (Sandbox Code Playgroud)
(如所讨论此处).该pod2text和pod2html工具将正常工作,并产生完美的UTF-8编码输出.
pod2man但是,该工具不会:
pod2man -u MyModule.pm | nroff -Tutf8 -man | less
Run Code Online (Sandbox Code Playgroud)
也没有perldoc.非ASCII字符都被破坏或X-ed输出.关于perlbug是否可能是一个错误或**roff*,有一些不确定的讨论pod2man.
由于我的模块专门处理Unicode并且打算在CPAN上进行分发,因此必须使用支持Unicode的手册页.
我使用的是Perl 5.14.2,perldoc 3.15和*roff 1.21.
如果我的问题不是很明确,我很抱歉.我不确定如何表达它.
我想使用VIM为我所在的某些类编写论文.我遇到的问题是编辑器中行的格式化.如果我没有使用回车键明确地断开行的结尾,当我尝试将光标移动到文本中时,如果我有一个跨越多行的句子,它会跳过多行.是否有任何方法可以使光标能够在文本中移动,就像在大多数文字处理器中一样?
我想我理解在Clojure交易中通勤和改变的想法之间的基本区别.
更改基本上从事务的开始到结束"锁定"身份,以便多个事务必须按顺序执行.
Commute仅将锁应用于身份的实际值更改,以便事务中的其他操作可以在不同的时间运行,并具有不同的世界视图.
但我对某些事感到困惑.让我们定义一个带有副作用的函数和一个参与的函数:
(defn fn-with-side-effects [state]
(println "Hello!")
(inc state))
(def test-counter (ref 0))
Run Code Online (Sandbox Code Playgroud)
现在,如果我们使用alter,我们会看到预期的行为:
user=> (dosync (alter test-counter fn-with-side-effects))
Hello!
1
Run Code Online (Sandbox Code Playgroud)
但是如果我们使用通勤:
user=> (dosync (ref-set test-counter 0))
0
user=> (dosync (commute test-counter fn-with-side-effects))
Hello!
Hello! ; hello is printed twice!
1
Run Code Online (Sandbox Code Playgroud)
因此在通勤版本中,该函数显然仅修改ref一次,因为最终值为1.但是修改器函数的副作用执行两次.为什么会这样?
clojure ×5
vim ×3
java ×2
stm ×2
agent ×1
asynchronous ×1
channel ×1
concurrency ×1
core.async ×1
fork-join ×1
forkjoinpool ×1
formatting ×1
java-8 ×1
java-stream ×1
macvim ×1
manpage ×1
perl ×1
pod ×1
text ×1
threadpool ×1
transactions ×1
unicode ×1