Der Operator ===
ist nicht kommutativ, was bedeutet, dass "foo" === /foo/
und /foo/ === "foo"
zwei sehr unterschiedliche Dinge sind. Und case
Anweisungen verwenden die letztere Reihenfolge.
Tatsächlich zeigt Ihr erstes Beispiel, das einen Bereich verwendet, bereits, dass diese Reihenfolge verwendet wird. 2 === (1..3)
würde nicht funktionieren, genauso wie Ihr zweites und drittes Beispiel nicht.
Der Grund, dass Reihenfolge gewählt wird, ist auch offensichtlich, zumindest wenn Sie damit vertraut sind, wie Operatoren in Ruby und OO Design im Allgemeinen funktioniert.
Der ===
Operator ist ein normales Verfahren, so eine andere Art und Weise /foo/ === "foo"
des Schreibens ist /foo/.===("foo")
- Und diese Ordnung macht Sinn, weil ein regulärer Ausdruck nicht wissen, ob es eine Zeichenfolge übereinstimmt, aber eine Zeichenfolge hat kein Konzept für reguläre Ausdrücke und doesn‘ Ich weiß, ob es mit einem übereinstimmen würde. Verlängert auf Ihr erstes Beispiel, weiß ein Bereich, ob ein Element ein Teil davon ist, aber ein Element hat keine Ahnung, ob es Teil eines Bereichs ist.
Versuchen Sie '/ foo/===" foo "'. Verändert sich Ihre Vorstellung davon, wie "Case" funktioniert? Denken Sie daran, dass nur der * Empfänger * in Ruby implizit polymorph ist und dass "a === b" effektiv "a .__ send __ (: ===, b)" ist. –
Ich habe nicht über Ordnung nachgedacht>.
mdesantis