Julia (Julia-lang) 在函数链中有条件

Julia (Julia-lang) conditional in function chaining

我正在尝试对 1 到 1000 之间所有可被 3 或 5 整除的数字求和。

第一次尝试很直接:

ans1 = 0
for x in 3:999
    ans1 += x % 3 == 0 || x % 5 == 0 ? x : 0 
end

当我尝试使用函数链接的相同方法时,它未能 return 我期望的答案,而是 returns 0.

ans2 = [3:999] |> x -> x % 3 == 0 || x % 5 == 0 ? x : 0 |> sum

我认为问题出在中心函数上,因为下面的代码打印了 3 到 999 范围内的所有值。所以我知道迭代没有问题。

[3:999] |> x -> println(x)

谁能帮帮我。

我发现原因是因为我不了解正在解析的类型。这是一个例子:

[3:999] |> println(typeof(x)) # Array{Int64,1}

意味着被解析的值是一个整数数组。因此评估以下内容:

[1:999] % 3 == 0 # false

所以我的答案是改用过滤器功能,这里有一个例子:

ans3 = sum(filter(x -> x % 3 == 0 || x % 5 == 0,[1:999]))

使用函数链的最终答案是:

ans4 = [1:999] |> x -> filter(y -> y % 3 == 0 || y % 5 == 0,x) |> sum

计算结果为预期答案。