Κατανόηση των 'String Literals' στο Ruby

Τα αντικείμενα των συμβολοσειρών κρατούνται ακολουθίες από bytes, τυπικά χαρακτήρες, συνήθως για να σχηματίσουν κομμάτια ανθρώπινου αναγνώσιμου κειμένου. Είναι ένας πολύ συνηθισμένος τύπος αντικειμένου σε όλες τις γλώσσες προγραμματισμού και Ρουμπίνι έχει έναν αριθμό από υψηλού επιπέδου και μερικούς τρόπους χαμηλού επιπέδου για τη δημιουργία, πρόσβαση και χειρισμό αντικειμένων String.

Οι χορδές δημιουργούνται συνήθως με ένα Σειρά κυριολεκτικά. ΕΝΑ κατά γράμμα είναι μια ειδική σύνταξη στη γλώσσα Ruby που δημιουργεί ένα αντικείμενο συγκεκριμένου τύπου. Για παράδειγμα, 23 είναι ένα γράμμα που δημιουργεί έναFixnum αντικείμενο. Όσο για τα κυκλώματα String, υπάρχουν διάφορες μορφές.

Μονοκίβες και διττές τιμές

Οι περισσότερες γλώσσες έχουν μια λέξη String παρόμοια με αυτή, έτσι αυτό μπορεί να είναι γνωστό. Οι τύποι εισαγωγικών, "(απλό απόσπασμα, απόστροφο ή σκληρό απόσπασμα) και "(διπλό παράθυρο ή μαλακό απόσπασμα) χρησιμοποιούνται για να περικλείουν γραμματοσειρές συμβολοσειρών, οτιδήποτε μεταξύ τους θα μετατραπεί σε αντικείμενα String. Το παρακάτω παράδειγμα δείχνει αυτό.

instagram viewer

Υπάρχουν όμως κάποιες διαφορές μεταξύ των μονών και των διπλών εισαγωγικών. Διπλά εισαγωγικά ή μαλακά αποσπάσματα να επιτρέψει κάποια μαγεία να συμβεί πίσω από τις σκηνές. Η πιο χρήσιμη είναι η παρεμβολή εντός των συμβολοσειρών, χρήσιμη για την εισαγωγή της τιμής μιας μεταβλητής στη μέση μιας συμβολοσειράς. Αυτό επιτυγχάνεται με τη χρήση του #{ … } αλληλουχία. Το παρακάτω παράδειγμα θα σας ρωτήσει για το όνομά σας και θα σας χαιρετήσει, χρησιμοποιώντας παρεμβολή για να εισαγάγετε το όνομά σας στο γραμματοσειρά που έχει εκτυπωθεί.

Σημειώστε ότι οποιοσδήποτε κωδικός μπορεί να πάει μέσα στα τιράντες, όχι μόνο ονόματα μεταβλητών. Ο Ruby θα αξιολογήσει αυτόν τον κώδικα και οτιδήποτε επιστρέφεται θα προσπαθήσει να το εισάγει στη συμβολοσειρά. Έτσι θα μπορούσατε εύκολα να πείτε "Γεια σας, # {gets.chomp}" και να ξεχάσουμε το όνομα μεταβλητός. Ωστόσο, είναι καλή πρακτική να μην τοποθετείτε μακρές εκφράσεις μέσα στα τιράντες.

Ενιαία εισαγωγικά, αποστάγματα, ή σκληρά αποσπάσματα είναι πολύ πιο περιοριστικές. Μέσα στα μοναδικά αποσπάσματα, ο Ruby δεν θα κάνει καμία παρεμβολή ή ακολουθίες διαφυγής εκτός από τη διαφυγή του χαρακτήρα μοναδικής προσφοράς και της ίδιας της πλάτης (\' και \\ αντίστοιχα). Αν δεν σκοπεύετε να χρησιμοποιήσετε παρεμβολή, συνιστάται να χρησιμοποιείτε συχνά αποσπάσματα πιο συχνά από ό, τι δεν είναι.

Το ακόλουθο παράδειγμα θα προσπαθήσει να παρεμβάλλει μια μεταβλητή μέσα σε μεμονωμένα εισαγωγικά.

Εάν εκτελέσετε αυτό δεν θα λάβετε σφάλμα, αλλά τι θα εκτυπωθεί;

Η αλληλουχία παρεμβολής διέρχεται διαμέσου μη ερμηνευμένης.

Πότε πρέπει να χρησιμοποιώ ενιαία και διπλά εισαγωγικά

Αυτό είναι θέμα ύφους. Μερικοί προτιμούν να χρησιμοποιούν διπλά εισαγωγικά όλες τις φορές εκτός αν γίνονται ενοχλητικές. Άλλοι προτιμούν να χρησιμοποιούν μεμονωμένα αποσπάσματα, εκτός εάν προορίζεται η συμπεριφορά παρεμβολής. Δεν υπάρχει τίποτα εγγενώς επικίνδυνος σχετικά με τη χρήση διπλών εισαγωγικών όλων των εποχών, αλλά κάνει κάποιου κώδικα ευκολότερο να διαβαστεί. Δεν χρειάζεται να διαβάσετε μια συμβολοσειρά κατά την ανάγνωση μέσω κώδικα αν γνωρίζετε ότι δεν υπάρχουν παρεμβολές σε αυτό επειδή γνωρίζετε ότι η ίδια η συμβολοσειρά δεν θα έχει παρενέργειες. Επομένως, η ακολουθία κυριοτέρων μορφών που χρησιμοποιείτε εξαρτάται από εσάς, δεν υπάρχει πραγματικός σωστός και λάθος τρόπος εδώ.

Ακολουθίες διαφυγής

Τι γίνεται αν, σε μια κυριολεκτική συμβολοσειρά, θέλετε να συμπεριλάβετε έναν χαρακτήρα απόσβεσης; Για παράδειγμα, η συμβολοσειρά "Ο Steve είπε" Moo! " δεν θα λειτουργήσει. Και δεν θα το κάνουν «Δεν μπορώ να αγγίξω αυτό!». Και οι δύο αυτές συμβολοσειρές περιλαμβάνουν τον χαρακτήρα απόσπασμα στο εσωτερικό της συμβολοσειράς, τελειώνοντας ουσιαστικά το string και προκαλώντας ένα σφάλμα σύνταξης. Θα μπορούσατε να μεταβείτε σε χαρακτήρες απόσπασης, όπως Ο Steve είπε: "Moo!", αλλά αυτό δεν λύνει πραγματικά το πρόβλημα. Αντ 'αυτού, μπορείτε να ξεφύγετε από κάθε χαρακτήρας quote μέσα στο string, και θα χάσει την ιδιαίτερη σημασία του (στην περίπτωση αυτή, το ειδικό νόημα είναι να κλείσετε τη συμβολοσειρά).

Για να ξεφύγετε από έναν χαρακτήρα, προπαγάγετε τον χαρακτήρα με την αντίστροφη κάθετο. Ο χαρακτήρας αντίστροφης κάθετης λέει στον Ruby να αγνοήσει οποιαδήποτε ειδική σημασία μπορεί να έχει ο επόμενος χαρακτήρας. Αν πρόκειται για έναν αντίστοιχο χαρακτήρα απόσβεσης, μην τερματίσετε τη συμβολοσειρά. Εάν πρόκειται για σημάδι κατακερματισμού, μην ξεκινήσετε ένα μπλοκ παρεμβολής. Το παρακάτω παράδειγμα δείχνει αυτή τη χρήση της ανάστροφης κάθετης για να ξεφύγει από τους ειδικούς χαρακτήρες.

Ο χαρακτήρας αντίστροφης κάθετος μπορεί να χρησιμοποιηθεί για να αφαιρέσει οποιαδήποτε ειδική έννοια από τον ακόλουθο χαρακτήρα, αλλά, με σύγχυση, μπορεί επίσης να χρησιμοποιηθεί για να υποδηλώσει ειδική συμπεριφορά σε συμβολοσειρές με διπλή τιμή. Οι περισσότερες από αυτές τις ειδικές συμπεριφορές έχουν να κάνουν με την εισαγωγή χαρακτήρων και αλληλουχιών byte που δεν μπορούν να δακτυλογραφούν ή να αναπαρασταθούν οπτικά. Δεν είναι όλες οι χορδές συμβολοσειρές χαρακτήρων ή μπορεί να περιέχουν ακολουθίες ελέγχου προοριζόμενες για το τερματικό και όχι για τον χρήστη. Το Ruby σας δίνει τη δυνατότητα να εισαγάγετε αυτούς τους τύπους συμβολοσειρών χρησιμοποιώντας το χαρακτήρα διαφυγής πίσω.

  • \ n - Ένας χαρακτήρας νέας γραμμής. ο θέτει Αυτό γίνεται αυτόματα, αλλά εάν θέλετε να εισαγάγετε ένα στη μέση μιας συμβολοσειράς ή εάν η συμβολοσειρά προορίζεται για κάτι διαφορετικό από το θέτει, μπορείτε να το χρησιμοποιήσετε για να εισαγάγετε μια νέα γραμμή σε μια συμβολοσειρά.
  • \ t - ένας χαρακτήρας καρτέλας. Ο χαρακτήρας της καρτέλας μετακινεί το δρομέα (στα περισσότερα τερματικά) σε ένα πολλαπλάσιο των 8, οπότε αυτό είναι πολύ χρήσιμο για την εμφάνιση των πινακοποιημένων δεδομένων. Ωστόσο, υπάρχουν καλύτεροι τρόποι να γίνει αυτό, και χρησιμοποιώντας το χαρακτήρα καρτέλα θεωρείται λίγο αρχαϊκό ή hackish.
  • \ nnn - Μια ανάστροφη κάθετος που ακολουθείται από 3 αριθμούς θα υποδηλώνει έναν χαρακτήρα ASCII που αντιπροσωπεύεται από 3 οκταδικά ψηφία. Γιατί οκταδικό; Κυρίως για ιστορικούς λόγους.
  • \ xnn - Μια πίσω κάθετο, ένα x και δύο εξαψήφια ψηφία. Το ίδιο με την οκταδική έκδοση, μόνο με εξαψήφια ψηφία.

Ποτέ δεν θα χρησιμοποιήσετε τα περισσότερα από αυτά, αλλά ξέρετε ότι υπάρχουν. Και επίσης να θυμάστε ότι δουλεύουν μόνο σε χορδές διπλής παραπομπής.

Η επόμενη σελίδα συζητά σειρές πολλαπλών γραμμών και μια εναλλακτική σύνταξη για τα γράμματα συμβολοσειρών.

Σειρές πολλαπλών γραμμών

Οι περισσότερες γλώσσες δεν επιτρέπουν κυκλικές σειρές γραμμών πολλών γραμμών, αλλά ο Ruby κάνει. Δεν χρειάζεται να τερματίσετε τις συμβολοσειρές σας και να προσθέσετε περισσότερες συμβολοσειρές για την επόμενη γραμμή, ο Ruby χειρίζεται γραμματοσειρές γραμμών πολλαπλών γραμμών πολύ καλά με την προεπιλογή σύνταξη.

Εναλλακτική Σύνταξη

Όπως και με τα περισσότερα άλλα literals, ο Ruby παρέχει μια εναλλακτική σύνταξη για τα γράμματα συμβολοσειρών. Εάν χρησιμοποιείτε πολλούς χαρακτήρες προσφοράς μέσα στα κυριολεκτικά γράμματα, για παράδειγμα, μπορεί να θέλετε να χρησιμοποιήσετε αυτή τη σύνταξη. Όταν χρησιμοποιείτε αυτή τη σύνταξη είναι θέμα στυλ, συνήθως δεν χρειάζονται για χορδές.

Για να χρησιμοποιήσετε την εναλλακτική σύνταξη, χρησιμοποιήστε την ακόλουθη ακολουθία για συμβολοσειρές μονής ονομασίας % q {...}. Παρομοίως, χρησιμοποιήστε την ακόλουθη σύνταξη για συμβολοσειρές διπλής κατεύθυνσης % Q {...}. Αυτή η εναλλακτική σύνταξη ακολουθεί όλους τους ίδιους κανόνες με τους "κανονικούς" ξαδέλφους τους. Επίσης, σημειώστε ότι μπορείτε να χρησιμοποιήσετε όλους τους χαρακτήρες που επιθυμείτε αντί για τιράντες. Εάν χρησιμοποιείτε ένα στήριγμα, ένα τετράγωνο βραχίονα, ένα γωνιακό βραχίονα ή μια παρένθεση, τότε ο αντίστοιχος χαρακτήρας θα τερματίσει τη λέξη. Εάν δεν θέλετε να χρησιμοποιήσετε τους αντίστοιχους χαρακτήρες, μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο σύμβολο (οτιδήποτε δεν είναι γράμμα ή αριθμός). Το κυριολεκτικό θα κλείσει με ένα άλλο σύμβολο. Το παρακάτω παράδειγμα δείχνει διάφορους τρόπους για να χρησιμοποιήσετε αυτή τη σύνταξη.

Η εναλλακτική σύνταξη λειτουργεί επίσης ως συμβολοσειρά πολλαπλών γραμμών.

instagram story viewer