小编glt*_*lts的帖子

什么是ForkJoinPool异步模式

ForkJoinPool的异步模式是什么意思?Javadoc提到它使队列(它是每线程队列吗?)FIFO而不是LIFO.这在实践中意味着什么?

java fork-join threadpool forkjoinpool

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

MacVim的西班牙语拼写检查器?

如何为MacVim添加西班牙语拼写检查程序?

我读到这是一个有用的链接,但显然它不起作用......我该怎么办?

vim spell-checking macvim

11
推荐指数
1
解决办法
2496
查看次数

应该在不使用时关闭core.async频道吗?

关闭方法(至少在java世界中)是你作为一个好公民必须在完成使用相关资源时调用的东西.不知何故,我自动开始应用相同的关闭!core.async库中的函数.据我所知,这些渠道对任何IO都不紧张,因此我不确定是否有必要致电关闭!是否可以在不关闭垃圾收集的情况下保留垃圾收集的频道(本地频道)?

asynchronous channel clojure core.async

11
推荐指数
1
解决办法
1008
查看次数

在Clojure中使用Java流

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

java clojure java-8 java-stream

11
推荐指数
1
解决办法
1408
查看次数

你如何在Clojure中使用sorted-map-by?

我根本无法理解文档.

我想要一个有序的地图"xxx",它根据值对地图进行排序.我怎么做?

谢谢.

clojure

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

Vim脚本中的"reduce"功能

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脚本中:...?

vim functional-programming

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

使用代理来完成STM事务中的副作用

我知道在STM事务中放置具有副作用的函数通常是不好的做法,因为它们可能被重试并多次调用.

然而,我发现你可以使用代理来确保只有在事务成功完成后才能执行副作用.

例如

(dosync
  // transactional stuff
  (send some-agent #(function-with-side-effects params))
  // more transactional stuff
  )
Run Code Online (Sandbox Code Playgroud)

这是好习惯吗?

有哪些优点/缺点/陷阱?

concurrency transactions clojure agent stm

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

如何在Perl POD派生的手册页中使用Unicode字符?

如果这是不可能的,处理从UTF-8编码的POD派生的手册页的最佳做法是什么?

要在POD中使用Unicode,要做的第一件事就是使用该指令

=encoding UTF-8
Run Code Online (Sandbox Code Playgroud)

(如所讨论此处).该pod2textpod2html工具将正常工作,并产生完美的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.

unicode perl manpage pod internationalization

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

将光标移动到Vim中的长软包裹线

如果我的问题不是很明确,我很抱歉.我不确定如何表达它.

我想使用VIM为我所在的某些类编写论文.我遇到的问题是编辑器中行的格式化.如果我没有使用回车键明确地断开行的结尾,当我尝试将光标移动到文本中时,如果我有一个跨越多行的句子,它会跳过多行.是否有任何方法可以使光标能够在文本中移动,就像在大多数文字处理器中一样?

vim formatting text

8
推荐指数
3
解决办法
2059
查看次数

在Clojure中更改ref时,为什么通勤函数被调用两次?

我想我理解在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 stm

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