我正在进行减少,我想积累并返回一个向量。这样做完成后效果很好:
(reduce
(fn [[res-vec last-rgb] rgb]
(let [calc-res (mu/colour-distance-L2 last-rgb rgb)
accum-results (conj res-vec calc-res)]
[accum-results rgb]))
[]
colour-selections)
但是当遗漏[]
参数时,我得到Caused by: java.lang.IllegalArgumentException: Don't know how to create ISeq from: java.lang.Long
。出现这种情况是因为colour-distance-L2
至少有一个java.lang.Long
而不是两个向量,因为它预期(类型 [r g b]
的两个向量 - 红绿色和蓝色)。
This正是我正在做的那种减少。
我不需要使用3-arity版本的reduce,因为colour-selections
的大小总是至少为2.我只是将[]
作为试用版的一部分和错误超过运行时错误。事实证明这样做会产生很好的效果。
有什么方法可以在这里使用2-arity版本的reduce?
答案 0 :(得分:4)
您只能使用2-arity class APIController < ApplicationController
before_action :check_headers
private
def check_header
# do whatever is required here
end
end
,前提是您的缩小功能具有类似(A,A)→A的签名 - 取两个相同类型的值并生成该类型的另一个值。
你的签名为(A,B)→A,其中A是一对reduce
和B是三[res-vec last-rgb]
。如果你想在B序列上减少它,提供第一个A开始序列是必要的,因为该函数不知道如何将两个B变为A。
话虽这么说,我在这里看不到[r g b]
的需要。假设reduce
是您减少的有趣值,它也可以通过将颜色距离映射到res-vec
以及本身减去1个元素来生成。像
colour-selections