小编Ala*_*son的帖子

使用Gerrit Trigger插件时,哪些环境变量传递给Jenkins?

我正在使用Gerrit Trigger插件来启动Jenkins构建,但是没有找到一个记录所有环境变量的好地方.这些文件是否存在?

triggers environment-variables gerrit jenkins

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

使用clojure core.async管道处理错误

我试图了解使用core.async/pipeline处理错误的正确方法是什么,我的管道如下:

input     --> xf-run-computation --> first-out
first-out --> xf-run-computation --> last-out
Run Code Online (Sandbox Code Playgroud)

xf-run-computationhttp会在哪里进行调用并返回响应.但是,其中一些响应将返回错误.处理这些错误的最佳方法是什么?我的解决办法是在分裂输出通道success-valueserror-values,然后将它们合并回一个信道:

(let [[success-values1 error-values1] (split fn-to-split first-out)
      [success-values2 error-values2] (split fn-to-split last-out)
      errors (merge [error-values1 error-values2])]
(pipeline 4 first-out xf-run-computation input)
(pipeline 4 last-out  xf-run-computation success-values1)
[last-out errors])
Run Code Online (Sandbox Code Playgroud)

所以我的函数将返回最后的结果和错误.

error-handling pipeline clojure core.async

6
推荐指数
1
解决办法
940
查看次数

Clojure 中的惯用日志记录

我是 clojure 的新手,想了解在 clojure 中登录的方法,来自命令式背景。在java生产程序中,我通常会在方法的开始结束处记录(调试/信息) ,如下所示:

public void foo(){
   logger.debug("starting method to embrace %s", rightIdioms);
   doSomething();
   logger.debug("successfully embraced %s idioms", idioms.length);
}
Run Code Online (Sandbox Code Playgroud)

我熟悉日志记录的优点/缺点,并且知道clojure 中可用的工具,

我还可以在上述方法中找到一些登录的缺点,这加深了我在非强制登录时感受到的紧张感:

  1. 日志记录是一种副作用,而 clojure 则力求无副作用。
  2. 更多代码行或“代码复杂性”:在 java 中 - 拥有大类很常见(getter、setter、构造函数),在 clojure 中,表达式返回值、记录“困难”过程并强化小函数和命名空间:(一个例子是需要从 if 更改为 if-let 或 if-do 来执行日志记录):

    (defn foo [x]
      (if (neg? x)
        (inc x)
        x))
    
    (defn foo [x]
      (if (neg? x)
        (let [new-x (inc x)] 
          (logger/debug (format "inc value, now %s" new-x)
          new-x)) …
    Run Code Online (Sandbox Code Playgroud)

logging functional-programming clojure

6
推荐指数
1
解决办法
2125
查看次数

在 Clojure 中修剪不可打印字符的一般方法

我遇到了一个错误,我无法将两个看似“相同”的字符串匹配在一起。例如,以下两个字符串无法匹配:“sample”和“?sample”。

要复制该问题,可以在 Clojure 中运行以下命令。

(= "sample" "?sample") ; returns false
Run Code Online (Sandbox Code Playgroud)

经过一个小时的沮丧调试,我发现第二个字符串前面有一个零宽度的空间!通过退格从这个特定的例子中删除它是微不足道的。但是,我有一个匹配的字符串数据库,似乎有多个字符串面临这个问题。我的问题是:是否有一种通用的方法可以在 Clojure 中修剪零宽度空格?

我试过的一些方法:

(count (clojure.string/trim "?abc")) ; returns 4
Run Code Online (Sandbox Code Playgroud)
(count (clojure.string/replace "?abc" #"\s" "")) ; returns 4
Run Code Online (Sandbox Code Playgroud)

这个线程从 JavaScript 字符串删除零宽度空格字符确实提供了一个在这个例子中工作的正则表达式解决方案,即

(count (clojure.string/replace "?abc" #"[\u200B-\u200D\uFEFF]" "")) ; returns 3
Run Code Online (Sandbox Code Playgroud)

但是,正如帖子本身所述,还有许多其他潜在的 ascii 字符可能是不可见的。所以我仍然很感兴趣,如果有一种更通用的方法不依赖于列出所有可能的不可见 unicode 符号。

string trim clojure string-matching zero-width-space

6
推荐指数
1
解决办法
448
查看次数

如何让 git difftool 使用 gvim (gvimdiff)?

git 似乎发生了变化,这使得 gvim 作为 diff 工具不再正常工作。具体来说,我总是使用 gvim -geometry 标志来最大化窗口。现在,我最终得到一个空白窗口(空/零行文件)。

git vim vimdiff git-diff

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

具有过滤功能的clojure first-thread

我遇到一个问题,将一些表格串联在一起,从korma函数对结果集进行一些ETL.

我从korma sql回来了:

({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"})

我想通过获取:a关键字为1 的"children"来过滤此结果集.

我的尝试:

;mock of korma result
(def data '({:id 1 :some_field "asd" :children [{:a 1 :b 2 :c 3} {:a 1 :b 3 :c 4} {:a 2 :b 2 :c 3}] :another_field "qwe"}))

(-> data 
    first 
    :children 
    (filter #(= (% :a) 1)))
Run Code Online (Sandbox Code Playgroud)

我在这里期待的是一个哈希图矢量:a设置为1,即:

[{:a 1 :b 2 :c 3} …
Run Code Online (Sandbox Code Playgroud)

clojure filter sqlkorma

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

什么是 Clojure 中的可折叠集合?

我是 Clojure 的初学者,在尝试阅读Reducers 时,我发现了一个叫做foldable collection 的东西。

他们提到矢量和地图是可折叠的集合,但不是列表。

我想了解什么是可折叠收藏,为什么矢量和地图是可折叠的?

我还没有找到可折叠收藏的任何定义或解释。

clojure reducers

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

如何在Clojure中搜索特殊字符?

Clojure使用了许多特殊字符,例如

  • ^String
  • #(xyz ...)
  • %&
  • #_(some form here)
  • >!

还有很多.鉴于Google 等人主要忽略网页和搜索字符串中的特殊字符,我如何搜索这些特殊字符的文档?

clojure clojurescript

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

如何使用开始/停止谓词对列表的连续元素进行分组?

假设我有一个列表,如:

(def data [:a :b :c :d :e :f :g :h :b :d :x])
Run Code Online (Sandbox Code Playgroud)

和谓词如:

(defn start? [x] (= x :b))
(defn stop?  [x] (= x :d))
Run Code Online (Sandbox Code Playgroud)

标记子序列的第一个和最后一个元素.我想返回一个包含子组的列表,如下所示:

(parse data) => [:a [:b :c :d] :e :f :g :h [:b :d] :x]
Run Code Online (Sandbox Code Playgroud)

如何使用Clojure完成此任务?

clojure

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

通过clojure将地图列表缩减为列表

几个星期前我开始学习一些函数式编程,我正在尝试从一个映射列表到一个列表中的映射,考虑到clojure中的特定键.

我的地图列表如下: '({:a "a1" :b "b1" :c "c1"} {:a "a2" :b "b2" :c "c2"} {:a "a3" :b "b3" :c "c3"})

我想要的输出是:'("b1" "b2" "b3").

我尝试过以下方法:

(doseq [m maps]
  (println (list (get m :b))))
Run Code Online (Sandbox Code Playgroud)

我的输出是一个列表列表(我正在为每次迭代创建一个列表,这是预期的).所以我的问题是,如何将其减少到一个列表?

更新

刚试过以下内容:

(let [x '()]
  (doseq [m map]
    (conj x (get m :b))))
Run Code Online (Sandbox Code Playgroud)

但是,它仍然无法正常工作.我没有得到重点,因为我期望将元素附加到空列表中

clojure

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