3 Stimmen

Was macht der ==~ Operator?

Was macht der ==~ Operator wie im Folgenden?

['a','b','c'].join ==~ /b/
# =>false

Ich habe einige verschiedene Arrays und Zeichenketten ausprobiert und habe nie einen Syntaxfehler erhalten, aber ==~ scheint ein Regex-Vergleichsoperator zu sein, der immer false zurückgibt.

3voto

mu is too short Punkte 411765

Sie haben recht, dass ==~ tatsächlich == und ~ ist, aber ein unäres ~ hat eine andere Bedeutung für ein Regex, als Sie denken. Aus der feinen Anleitung:

~ rxp Ganze Zahl oder nil

Matcht - Passt rxp gegen den Inhalt von $_ an. Äquivalent zu rxp =~ $_.

$_ = "Eingabedaten"
~ /at/   #=> 7

Allgemein würde man ~regex in einem Befehlszeilenbefehl verwenden, der eine der Schalter benutzt, die Ihr Ruby in einer impliziten Schleife umhüllen und $_ setzen.

Betrachten Sie dieses einfache Beispiel und Sie werden sehen, was passiert:

>> $_ = 'Pfannkuchen'
=> "Pfannkuchen"
>> ~/pancakes/
=> 0
>> 0 ==~ /pancakes/
=> true

1voto

Sqeaky Punkte 1806

Dies sind tatsächlich zwei verschiedene Operatoren == und ~. ~ ist ein bitweiser not oder Bitkomplementoperator. Wenn er gegen einen regulären Ausdruck verwendet wird, ergibt er immer nil. Ich glaube, das liegt daran, dass reguläre Ausdrücke kein sinnvolles bitweises Muster haben.

>~/b/
=> nil

Wenn du nil mit etwas vergleichst (außer nil), erhältst du false.

>a=60
=> 60
> ~a
=> -61

Wenn du eine Variable a hast und sie 60 als Fixnum speichert, speichert sie auf x86 tatsächlich 00111100. In diesem Fall liefert ~a den Wert, der durch 11000011 repräsentiert wird, nämlich -61.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X