【问题标题】:Variable Arguments for Riemann project function黎曼项目函数的变量参数
【发布时间】:2017-09-28 16:12:20
【问题描述】:

所以我正在研究一个流函数,它将总结几个事件的一些指标。为此,我使用了project 函数,它看起来像这样:

(project [(func (:service event) (nth service-list 0))      
          (func (:service event) (nth service-list 1))
          (func (:service event) (nth service-list 2))]
         (..))

service-list 是环绕函数的一个参数,它包含一个必须相加的服务向量。 func 是一个接受两个参数并返回 true/false 的函数元素会起作用。

到目前为止,我有这个:

    (project (mapv (fn[service] (
                   `func (:service event) ~service)
                   ) service-list)))
             (..)

我认为它会返回一个未评估的函数向量。一旦我意识到project 是一个宏,我就采用了这种方法。不知道我是否做对了……

【问题讨论】:

    标签: clojure riemann


    【解决方案1】:

    您面临的问题是您不能只动态组装宏调用的参数。因此,您需要动态组装整个宏调用。

    您可以构建一个 clojure 表单并在其上调用 eval。采取以下措施。

        (let [args (mapv #(list 'func (:service 'event) %) service-list)
              form (list 'project args (...))]
          (eval form))
    

    或者,您也可以使用riemann.streams/project* 函数来使用谓词函数,而不是where 表达式。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多