Erstens Sie bei noch nicht vollständig verstehen, Zuweisung von Werten an Variablen werden durch =
getan, und dass Sie überprüfen können, welcher Variablentyp es ist, indem Sie .class
an etwas anfügen.
Beachten Sie Folgendes:
name = 'John'
puts name
# => John
puts name.class
# => String
Nun zweitens sei darauf hingewiesen, dass die Rückgabewerte aller Methoden sind alle unterschiedlich. Aber sie alle können in zwei Typen unterschieden werden:
Methods, dass:
- Rückkehr Selbst
- Rückkehr alles andere als selbst
Beispiel für 1.
- Methoden, die self zurückgeben, die man Methoden nennen könnte, die den gleichen Objekttyp zurückgeben, der in unserem speziellen Fall eineist
name = 'John'
puts name
# => 'John'
puts name.class
# => String
downcased_name = name.downcase
puts downcased_name
# => john
puts downcased_name.class
# => String
deleted_downcased_name = downcased_name.delete('h')
puts deleted_downcased_name
# => jon
puts deleted_downcased_name.class
# => String
# All of the above can be just simplified into:
deleted_downcased_name2 = 'John'.downcase.delete('h')
puts deleted_downcased_name2
# => jon
puts deleted_downcased_name2.class
# => String
Beachten Sie, dass deleted_downcased_name
und deleted_downcased_name2
gleich sind, weil Sie die verkettete Methoden behandeln könnte, als ob Sie die Rückgabewerte sind Chaining, die ‚John‘ ist -> ‚john‘ -> ‚jon‘.
Beispiel für 2
- Methoden, die alles andere als selbst zurückkehren, die Sie Methoden sagen könnte, die einen anderen Typ zurückgeben.
In unserem speziellen Fall downcase!
kehrt String entweder eine String
oder NilClass
(reference here)
- Rückkehr
String
wenn die Zeichenfolge ändert oder
nil
Rückkehr, wenn der String bereits mit (keine Veränderung) beginnen downcased wird.
oder eine andere Methode String: (reference here)
Dies ist, wo der Methoden Chaining wird nicht funktionieren (löst einen Fehler), wenn Sie versuchen, eine zu verwenden, String-Methode als Kette zu Nullwert.
Betrachten Sie die folgende
name = 'mary'
puts name
# => 'mary'
puts name.class
# => String
downcased_name = name.downcase!
puts downcased_name
# => nil
puts downcased_name.class
# => NilClass
downcased_name.delete('h')
# => This will raise the following error
# NoMethodError: undefined method `delete' for nil:NilClass
Der Fehler, der oben ist, weil downcased_name eine Art von NilClass
ist, wo Sie erwarten, es ist eine Art von String
zu sein. Daher können Sie keine String-Methode mehr verketten. Sie können String
Methoden nur auf einen String
Werttyp verketten. Ebenso können Sie Number
Methoden nur auf einen Number
Werttyp verketten.
Im Zweifelsfall können Sie in der Dokumentation immer nachsehen, was eine Methode macht und was der Rückgabewert und Typ ist.
Verwenden Sie 'downcase' anstelle von' downcase! '? – YOU