Dlaczego różnica znakowanego / nieoznakowanego argumentu wynika inny zwrot?

głosy
0

Właśnie rozpoczął naukę powodu (SML), a ja nie rozumiem tytułowy rzecz. Dlaczego funkcjonować druga część powraca, ale nie obliczono wartość? Myślałem, że tylko sposób przekazywania różni argument i wynik nie robi.

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

Utwórz 13/02/2020 o 22:00
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
3

Wymagane jest, aby mieć co najmniej jeden parametr pozycyjny gdy istnieją argumenty opcjonalne oznaczone (lub, jak w twoim przypadku, argumenty z parametrem domyślnym). Inaczej Powód oczekuje od Ciebie, że chcesz korzystać z funkcji częściowo stosowane.

W celu zapewnienia pełnego stosowania, należy użyć jednostki ()zarówno w deklaracji funkcji i wywołania funkcji, aby poinformować kompilator, że chcesz pominąć ~xparametr.

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

Odpowiedział 13/02/2020 o 22:33
źródło użytkownik

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