Οι συναρτήσεις αντιμετωπίζονται ως πολίτες πρώτης κατηγορίας στην Elixir. Αυτό σημαίνει ότι:
Οι ανώνυμες συναρτήσεις, σε αντίθεση με τις επώνυμες, δεν έχουν κάποια στατική αναφορά διαθέσιμη σε αυτές, είναι διαθέσιμες μόνο αν ανατεθούν σε μια μεταβλητή ή κληθούν άμεσα.
Μπορεί να χρησιμοποιήσουμε ανώνυμες συναρτήσεις για να:
Οι ανώνυμες συναρτήσεις ξεκινούν με τη δεσμευμένη λέξη fn, τα ορίσματα χωρίζονται από το σώμα της συνάρτησης με το σύμβολο -> και τελειώνουν με ένα end. Όπως και με τις επώνυμες συναρτήσεις, η τελευταία έκφραση μέσα στη συνάρτηση επιστρέφεται έμμεσα στη συνάρτηση που την κάλεσε.
Για να καλέσεις μια αναφορά συνάρτησης, πρέπει να βάλεις μια . ανάμεσα στη μεταβλητή αναφοράς και τη λίστα των ορισμάτων:
function_variable = fn param ->
param + 1
end
function_variable.(1)
# => 2
Μπορείς μάλιστα να χρησιμοποιήσεις τη συντομευμένη σημειογραφία σύλληψης για να γίνει ακόμη πιο σύντομο:
variable = &(&1 + 1)
variable.(1)
# => 2
Η Elixir υποστηρίζει πολλές συναρτήσεις για εργασία με bit, που βρίσκονται στο άρθρωμα Bitwise.
band/2: bitwise ANDbsl/2: bitwise SHIFT LEFTbsr/2: bitwise SHIFT RIGHTbxor/2: bitwise XORbor/2: bitwise ORbnot/1: bitwise NOTΟρίστε ένα παράδειγμα για το πώς να χρησιμοποιήσεις μια συνάρτηση bitwise:
Bitwise.bsl(1, 3)
# => 8
Όλες οι συναρτήσεις bitwise λειτουργούν μόνο με ακέραιους αριθμούς.
Αν τρέχεις την έκδοση 1.9 της Elixir ή παλαιότερη, θα χρειαστεί να καλέσεις το require Bitwise στην αρχή του ορισμού του αρθρώματος για να μπορείς να χρησιμοποιήσεις το άρθρωμα Bitwise.
Σε αυτή την άσκηση, σου έχει ανατεθεί να γράψεις το λογισμικό για μια συσκευή κρυπτογράφησης που λειτουργεί εκτελώντας μετασχηματισμούς σε δεδομένα. Χρειάζεσαι έναν τρόπο να δημιουργείς πολύπλοκες συναρτήσεις με ευελιξία, συνδυάζοντας απλούστερες συναρτήσεις μεταξύ τους.
Για κάθε εργασία, επέστρεψε μια ανώνυμη συνάρτηση που μπορεί να κληθεί από το πλαίσιο κλήσης.
Όλες οι συναρτήσεις πρέπει να δέχονται ακέραια ορίσματα. Οι ακέραιοι είναι επίσης κατάλληλοι για την εκτέλεση πράξεων bitwise στην Elixir.
Υλοποίησε τη Secrets.secret_add/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και προσθέτει σε αυτό το όρισμα που πέρασες στη secret_add.
adder = Secrets.secret_add(3)
adder.(2)
# => 5
Υλοποίησε τη Secrets.secret_subtract/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και αφαιρεί από αυτό το όρισμα το μυστικό που πέρασες στη secret_subtract.
subtractor = Secrets.secret_subtract(2)
subtractor.(3)
# => 1
Υλοποίησε τη Secrets.secret_multiply/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και το πολλαπλασιάζει με το μυστικό που πέρασες στη secret_multiply.
multiplier = Secrets.secret_multiply(7)
multiplier.(3)
# => 21
Υλοποίησε τη Secrets.secret_divide/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και το διαιρεί με το μυστικό που πέρασες στη secret_divide.
divider = Secrets.secret_divide(3)
divider.(32)
# => 10
Χρησιμοποίησε ακέραια διαίρεση ώστε η έξοδος να είναι συμβατή με την αναμενόμενη είσοδο των άλλων συναρτήσεων.
Υλοποίησε τη Secrets.secret_and/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και εκτελεί μια bitwise πράξη and σε αυτό και στο μυστικό που πέρασες στη secret_and.
ander = Secrets.secret_and(1)
ander.(2)
# => 0
Υλοποίησε τη Secrets.secret_xor/1. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και εκτελεί μια bitwise πράξη xor σε αυτό και στο μυστικό που πέρασες στη secret_xor.
xorer = Secrets.secret_xor(1)
xorer.(3)
# => 2
Υλοποίησε τη Secrets.secret_combine/2. Θα πρέπει να επιστρέφει μια συνάρτηση που δέχεται ένα όρισμα και εφαρμόζει σε αυτό τις δύο συναρτήσεις που πέρασες στη secret_combine με τη σειρά.
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
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Elixir με 58 έννοιες168 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.