Az Elixirben a függvények első osztályú állampolgárok. Ez a következőket jelenti:
A névtelen függvényeknek a nevesített függvényekkel ellentétben nincs statikus hivatkozásuk, csak akkor érhetők el, ha egy változóhoz rendeljük őket, vagy ha azonnal meghívjuk őket.
A névtelen függvényeket például arra használhatjuk, hogy:
A névtelen függvények a fn fenntartott szóval kezdődnek, az argumentumokat a -> token választja el a függvény törzsétől, és egy end zárja le őket. A nevesített függvényekhez hasonlóan a függvény utolsó kifejezése implicit módon visszaadódik a hívó függvénynek.
Egy függvényhivatkozás meghívásához egy .-ot kell tenned a hivatkozást tartalmazó változó és az argumentumok listája közé:
function_variable = fn param ->
param + 1
end
function_variable.(1)
# => 2
Akár a rövidített capture-jelölést is használhatod, hogy ez még tömörebb legyen:
variable = &(&1 + 1)
variable.(1)
# => 2
Az Elixir sok függvényt kínál a bitekkel való munkához, ezek a Bitwise modulban találhatók.
band/2: bitenkénti ANDbsl/2: bitenkénti SHIFT LEFTbsr/2: bitenkénti SHIFT RIGHTbxor/2: bitenkénti XORbor/2: bitenkénti ORbnot/1: bitenkénti NOTÍme egy példa egy bitenkénti függvény használatára:
Bitwise.bsl(1, 3)
# => 8
Minden bitenkénti függvény csak egész számokkal működik.
Ha 1.9-es vagy annál régebbi Elixir-verziót használsz, a modul definíciójának elején meg kell hívnod a require Bitwise-ot, hogy használhasd a Bitwise modult.
Ebben a feladatban egy olyan titkosító eszköz szoftverét kell megírnod, amely adatok átalakításával működik. Szükséged van egy módszerre, amellyel egyszerűbb függvények összekapcsolásával rugalmasan hozhatsz létre bonyolult függvényeket.
Minden részfeladatnál adj vissza egy névtelen függvényt, amelyet a hívó scope-ból meg lehet hívni.
Minden függvény egész szám típusú argumentumot várjon. Az egész számok Elixirben bitenkénti műveletek végzésére is alkalmasak.
Valósítsd meg a Secrets.secret_add/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és hozzáadja ehhez a secret_add-nak átadott argumentumot.
adder = Secrets.secret_add(3)
adder.(2)
# => 5
Valósítsd meg a Secrets.secret_subtract/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és abból kivonja a secret_subtract-nak átadott titkot.
subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1
Valósítsd meg a Secrets.secret_multiply/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és megszorozza a secret_multiply-nak átadott titokkal.
multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21
Valósítsd meg a Secrets.secret_divide/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és elosztja a secret_divide-nak átadott titokkal.
divider = Secrets.secret_divide(3)
divider.(32)
# => 10
Használj egész számok közötti osztást, hogy a kimenet kompatibilis legyen a többi függvény várt bemenetével.
Valósítsd meg a Secrets.secret_and/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és bitenkénti and műveletet végez rajta és a secret_and-nak átadott titkon.
ander = Secrets.secret_and(1)
ander.(2)
# => 0
Valósítsd meg a Secrets.secret_xor/1 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és bitenkénti xor műveletet végez rajta és a secret_xor-nak átadott titkon.
xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2
Valósítsd meg a Secrets.secret_combine/2 függvényt. A függvény adjon vissza egy olyan függvényt, amely egy argumentumot kap, és sorrendben alkalmazza rá a secret_combine-nak átadott két függvényt.
add_one = Secrets.secret_add(1)
multiply_by_2 = Secrets.secret_multiply(2)
combined = Secrets.secret_combine(add_one, multiply_by_2)
combined.(3)
# => 8
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.