Proto je rozdíl značeného / neznačeného argumentace vede jiný návrat?

hlasů
0

Jen jsem začal učit důvod (ocaml) a já nerozumím názvem věc. Proto druhá část se vrátí fungovat, ale nevypočítává hodnotu? Myslel jsem, že jediný způsob, jak předávání argumentů liší a výsledek není.

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

Položena 14/02/2020 v 00:00
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Je nutné mít alespoň jeden poziční parametr, když tam jsou volitelné značené argumenty (nebo jako v případě argumenty s výchozím parametrem). Jinak Důvod očekává od vás, že budete chtít použít částečně aplikovanou funkci.

Aby se zajistilo plné uplatnění, používat přístroj ()v obou deklaraci funkce a funkce vyvolání říci kompilátoru, který chcete vynechat ~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

Odpovězeno 14/02/2020 v 00:33
zdroj uživatelem

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