Передача первых нескольких переменных в функции - PullRequest
1 голос
/ 22 апреля 2019

У меня есть код на BuckleScript:

let add = (x, y) => x+y;
2 -> (3 -> add);

Я бы ожидал, что он скомпилируется по очевидным причинам.Но это не так.Я получаю

'|.' is not a valid value identifier.

Почему?Приветствия.

Ответы [ 3 ]

4 голосов
/ 27 апреля 2019

Это ошибка, только что внесла предварительную поправку!

1 голос
/ 23 апреля 2019

Я не знаю, почему вы получаете именно эту ошибку, а потому что синтаксическое преобразование вместо обычного оператора, но я подозреваю, что BuckleScript может не проверять |. рекурсивно, а вместо этого передает его компилятору, который определяет его быть недопустимым «идентификатором значения», что бы это ни значило.

Но в любом случае я не вижу, как это будет работать на практике. Он хорошо работает с |>, потому что это обычный оператор, который полагается на карри. Каждое приложение |> будет «добавлять» аргумент и из-за каррирования возвращает фактическое значение, либо конечное значение, либо частично примененную функцию, например ::

.
3 |> add  <=>  add(3)  <=>  y => add(3, y)

Что вернет частичное применение |.? Карри не работает в обратном направлении. Единственная возможность - вернуть явную функцию, которая применяет последний аргумент, например, x => add(x, 3), но это требует знания арности функции и, следовательно, больше не является синтаксическим преобразованием.

|. - это, на мой взгляд, неприятный хак, который не вписывается в язык естественным образом, но все равно был вынужден использовать BuckleScript, и его использование, к сожалению, поощряется, несмотря на его недостатки и серьезные негативные последствия. Мой совет (как обычно) избегать этого. В Reason вы можете использовать |> _ вместо этого, когда это необходимо, например, 3 |> add(_, 2) <=> 3 -> add(2).

0 голосов
/ 23 апреля 2019

Оператор pipe first доступен только при компиляции Reason для JavaScript с BuckleScript (см. docs для pipe сначала на сайте BuckleScript).

Если выработая над собственным проектом Reason (или проектом, который использует собственный компилятор в браузере через js_of_ocaml, например sketch.sh ), оператор канала будет недоступен.

Причина, почемусообщение об ошибке показывает |., потому что оператор канала записывается как -> в синтаксисе Reason и как |. в синтаксисе OCaml.

См. В чем разница между -> и |> вreasonml? для более подробной информации.

...