Как использовать |> и правильно сопоставлять входы кортежей с шаблонами? - PullRequest
2 голосов
/ 30 марта 2019

У меня проблемы с пониманием, почему ниже не работает?

(10, 10) |> ((a,b) -> a + b)

Фактический вариант использования намного сложнее, но я надеюсь сначала понять эту простую схему в Юлии.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2019

((a,b) -> a + b) является функцией двух аргументов, а кортеж (10, 10) - это всего лишь одно значение.В качестве альтернативы сплаттингу, как предлагает @Gnimuc, вы можете распаковать аргумент в лямбду:

julia> (10, 10) |> (((a,b),) -> a + b)
20

Но я считаю, что лишняя запятая немного уродлива, если честно.

2 голосов
/ 30 марта 2019

оператор конвейеризации поддерживает только цепочку из одного аргумента:

"""
    |>(x, f)

Applies a function to the preceding argument. This allows for easy function chaining.

# Examples
```jldoctest
julia> [1:5;] |> x->x.^2 |> sum |> inv
0.01818181818181818
```
"""
|>(x, f) = f(x)

(10, 10) |> ((a,b) -> a + b) эквивалентно ((a,b) -> a + b)((10, 10)), что явно недопустимо в Юлии, потому что отсутствует оператор разбрызгивания ((a,b) -> a + b)((10, 10)...) и, следовательно,

julia> (10, 10) |> x->((a,b) -> a + b)(x...)
20
...