Почему разница меченого / немаркированной аргумента приводит другое возвращение?

голоса
0

Я только начал изучать Reason (OCaml), и я не понимаю, названное дело. Почему вторая возвращает часть функционировать, но не рассчитали значение? Я думал, что только способ передачи аргументов отличаются и результат не делает.

let addWithoutLabel = (~x=10) => (y) => x + y;
let fifteen = addWithoutLabel(5);
Js.log(fifteen)
/* 15 */

let addWithLabel = (~x=10) => (~y) => x + y;
let sixteen = addWithLabel(~y=6);
Js.log(sixteen)
/* 
function sixteen(param) {
  return addWithLabel(param, 6);
}
*/

https://reasonml.github.io/en/try.html?rrjsx=true&reason=DYUwLgBAhgJjDqBLMALA9gVzAGSgIxGAgF4IAKAPwA9iBGABgEoSA+cgT2eLaogGoI7ANwAoUJABmiCWBAgAdiWhwkqTDnyEyAVkaiAUgGcAdMDQBzMlJlz5jEQHoAVBFraIThyLHhlCZCi4BESklDQMXGyUnKwQvALCPpCGiFSyCkqw-qhBWhTsxABseiJGphZkKWm29s4QIhIY8gDGYIhoilXp8mQADlAATlAAtswA3iIQEAPgGAOKWaqBmsB9gyMANBDFogC+Ip5AA

Задан 14/02/2020 в 00:00
источник пользователем
На других языках...                            


1 ответов

голоса
3

Необходимо иметь по крайней мере один позиционный параметр, когда есть необязательные аргументы, помеченные (или, как в вашем случае, аргументы с параметром по умолчанию). В противном случае Reason ожидает от вас, что вы хотите использовать частично применяется функция.

Для обеспечения полного приложения используйте блок ()как в объявлении функции и вызов функции , чтобы сообщить компилятору , что вы хотите , чтобы опустить ~xпараметр.

let addWithoutLabel = (~x=10) => (y) => x + y;
let fifteen = addWithoutLabel(5);
Js.log(fifteen)
/* 15 */

let addWithLabel = (~x=10) => (~y, ()) => x + y;
let sixteen = addWithLabel(~y=6, ());
Js.log(sixteen)
/* 16 */

https://reasonml.github.io/en/try.html?rrjsx=true&reason=DYUwLgBAhgJjDqBLMALA9gVzAGSgIxGAgF4IAKAPwA9iBGABgBoIBPAShID4IqIBqVgG4AUKEgAzROLAgQAOxLQ4SVJhz5CZAKxsRAKQDOAOmBoA5mUnTZc3cID0AKgi0tER-eGjwShMhS4BESklDQMHMTclCzMZGwR3LwCLCJiEAaIVDLyirB+qIGaFCzEAGyx8frGphYZWTZ2Ti6l7p5AA

Ответил 14/02/2020 в 00:33
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more