[RUBY] Der ActiveSupport-Unterstrich ist nicht die inverse Konvertierung von camelize

Wenn Sie ein Wort verwenden, das aus mehreren Wörtern in einem Bezeichner besteht, können Sie keine Leerzeichen einfügen, daher müssen Sie irgendwie ein Worttrennzeichen darstellen. Beispielsweise wird die folgende Notation verwendet.

ActiveSupport bietet eine Reihe nützlicher Methoden zum Konvertieren zwischen diesen.

Sie können String # underscore verwenden, um CamelCase in snake_case zu konvertieren. Sie können String # camelize verwenden, um snake_case in UpperCamelCase [^ lcc] zu konvertieren.

[^ lcc]: Verwenden Sie camelize (: lower), um in lowerCamelCase zu konvertieren.

Wie nachstehend:

require "active_support/inflector"

p "BookTitle".underscore # => "book_title"
p "book_title".camelize  # => "BookTitle"

Wenn man dies betrachtet, sind "Unterstrich" und "Kamelisieren" inverse Umrechnungen voneinander.

require "active_support/inflector"

p "BookTitle".underscore.camelize  # => "BookTitle"
p "book_title".camelize.underscore # => "book_title"

Es scheint (immer) zum Original zurückzukehren, wenn sich beide wie überlappen.

In einigen Fällen ist dies jedoch nicht der Fall. das ist

require "active_support/inflector"

p "OfficialURL".underscore # => "official_url"
p "CSVFile".underscore     # => "csv_file"

Dies ist ein Fall, der Wörter enthält, die nur aus Großbuchstaben bestehen, z. B. "URL" und "CSV". Die "Unterstrich" -Methode teilt "CSVFile" in "CSV" und "File" in einen Schlangenfall auf, wie es Menschen erwarten würden. Dadurch geht jedoch die Information verloren, dass die konvertierten "url" und "csv" ursprünglich nur in Großbuchstaben geschrieben wurden, sodass "camelize" sie nicht wiederherstellt.

require "active_support/inflector"

p "OfficialURL".underscore.camelize # => "OfficialUrl"
p "CSVFile".underscore.camelize     # => "CsvFile"

Es war ein Beispiel dafür, dass selbst eine bequeme Methode in eine Falle geraten könnte, wenn die Spezifikationen nicht gut verstanden und verwendet werden. (Eines Tages war ich tatsächlich süchtig danach!)

[^ ot]: Anfangs habe ich es mit einem Code wie gsub (/. (? = [AZ]) /) {$ & +" _ "} .downcase zu einem snake_case gemacht und später die Verarbeitung mit ActiveSupport gemischt. Manchmal ging etwas schief.

Recommended Posts

Der ActiveSupport-Unterstrich ist nicht die inverse Konvertierung von camelize
Die Idee, abzuschalten, wenn der Fehler nicht behoben ist
[Schienen] Wenn die Layoutänderung des Geräts nicht berücksichtigt wird
'% 02d' Was ist der% von% 2?
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Wie ist die Datenstruktur von ActionText?
Ist es Mainstream, das schließende Tag des <P> -Tags nicht in Javadoc zu schreiben?
[Java] Tag ab Datum berechnen (Kalenderklasse nicht verwenden)
Was ist JSP? ~ Lassen Sie uns die Grundlagen von JSP kennen !! ~
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Die Gerätefehlermeldung wird nicht richtig angezeigt.
Der öffentliche Schlüssel für jenkins-2.249.1-1.1.noarch.rpm ist nicht installiert
Der offizielle Name von Spring MVC ist Spring Web MVC
Wenn das Projekt nicht in Eclipse angezeigt wird
Ebean.update () wird im geerbten Modell nicht ausgeführt.
Die Essenz von AspectJs Stimmung - warum Ihr "@ Transactional" ignoriert wird
Wenn der Schwebeflug von Eclipse schwer zu sehen ist
In Time.strptime ist% j (Gesamtdatum des Jahres)
Ist drainTo von LinkedBlockingQueue sicher? Ich bin der Quelle gefolgt
Der Vergleich von enum ist == und gleich ist gut [Java]
Runden Sie das Ergebnis einer Bruchberechnung nicht einfach ab
[JUnit 5] Der Umgang mit "der Referenz von assertEquals ist mehrdeutig"
Die Frage, welche besser ist, ob oder wechseln
Wenn der Monat des Datums erfasst wird, verschiebt sich der Januar
[Swift] Das ist die Lösung! Abbildung der Implementierung des Delegierten
PATH geht nicht vorbei ... Die Ursache ist der Zeichencode
[Fehler] Die App wird in der Produktionsumgebung nicht angezeigt
Wie ist der nächste Wert des Time-Objekts korrekt?
Verwenden Sie keinen Befehl, wenn Sie die CMD des Docker-Images von Pod im Manifest von k8s neu schreiben
Selbst wenn ich die Einstellung von STRICT_QUOTE_ESCAPING in CATALINA_OPTS in tomcat8.5 schreibe, wird sie nicht wiedergegeben.