Warum kann ich .print () nicht "zeichnen"?

7

Mein Verständnis von print() in Python und Ruby (und anderen Sprachen) ist, dass es sich um eine Methode in einer Zeichenkette (oder anderen Typen) handelt. Weil es so häufig verwendet wird, die Syntax:

  

drucke "hi"

funktioniert.

Warum funktioniert "hi".print() in Python oder "hi".print in Ruby nicht?

    
DorkRawk 04.09.2012, 23:59
quelle

7 Antworten

9

Wenn Sie etwas wie "hi".print() tun, implizieren Sie, dass das String-Objekt "hi" eine Methode print hat. Das ist nicht der Fall. Stattdessen ist print eine Funktion, die eine Zeichenfolge (oder andere Typen) als Eingabe verwendet.

    
guyrt 05.09.2012, 00:01
quelle
4

Ruby hat eine Methode Object#display ( doc hier ), die eine Repräsentation des Objekts an den aktuellen Ausgabestream sendet oder eine als Argument angegebene.

(Ich finde, dass es schwierig ist, in irb zu arbeiten, wenn ich ; am Ende einer Zeile verwende, um den Ausdruck des Rückgabewerts zu unterdrücken; wenn ich das tue, wird die Ausgabe von display nicht angezeigt , auch wenn ich den Stream spüle.)

    
echristopherson 05.09.2012 05:31
quelle
2

Es ist nicht eine Methode für eine Zeichenfolge. Vor Python 3 war es eine Aussage (nur wie break oder import ), und Sie könnten sowohl print "hi" als auch print("hi") verwenden. In Python 3 wurde durch eine Funktion ersetzt. Daher können Sie print "hi" nicht mehr verwenden:

  

Drucken ist eine Funktion

     

Die Druckanweisung wurde durch a ersetzt   Funktion print (), mit Schlüsselwortargumenten, die die meisten ersetzen   spezielle Syntax der alten Druckanweisung (PEP 3105).

    
João Silva 05.09.2012 00:04
quelle
2

Warum sollte es funktionieren? String-Klassen haben selten void print Methoden - und Sie würden sie nie brauchen, weil die Standard-Funktion statisch print diese Zeichenfolgen trotzdem drucken kann. Es ist wichtig zu beachten: method(someObject) ist nicht notwendigerweise gleich someObject.method() .

    
arshajii 05.09.2012 00:02
quelle
2

Was schlagen Sie str.print vor?

auf stdout drucken? Wie wäre es mit Stderr? oder eine Datei? oder eine serielle Schnittstelle?

Der Ausdruck auf stdout ist wirklich ein Spezialfall, aber es ist so allgegenwärtig, dass es manchmal übersehen werden kann.

Dann müssten wir angeben, wo str jedes Mal drucken soll, wenn wir eine Zeichenfolge erstellen?

Zumindest müssten wir sagen

%Vor%

Hoffentlich sieht das auch für dich schrecklich aus. Es ist eine Verwirrung der Verantwortlichkeiten

    
John La Rooy 05.09.2012 00:09
quelle
0

print ist keine Methode für eine Zeichenfolge in Python (oder in Ruby, glaube ich). Es ist eine Aussage (in Python 3 ist es eine globale Funktion). Warum? Zum einen ist nicht alles, was Sie drucken können, eine Zeichenfolge. Wie wäre es mit print 2 ?

    
li.davidm 05.09.2012 00:02
quelle
-1

Wenn Sie lieber eine Methode als eine Anweisung in Ruby verwenden möchten, können Sie die Methodenanzeige ( "test".display ) verwenden, um dies zu erreichen, oder einfach eine neue Methode wie

definieren %Vor%

und benutze es so

%Vor%     
peter 05.09.2012 08:45
quelle

Tags und Links