print()PythonとRuby(および他の言語)の両方での私の理解は、それが文字列(または他のタイプ)のメソッドであるということです。非常に一般的に使用される構文であるため、次のようになります。
「こんにちは」を印刷
動作します。
では、なぜ"hi".print()Pythonや"hi".printRubyでは機能しないのでしょうか。
のようなことをするとき"hi".print()は、文字列オブジェクト"hi"にメソッドがあることを意味しますprint。これはそうではありません。代わりに、print文字列(または他のタイプ)を入力として受け取る関数です。
Rubyには、オブジェクトの表現を現在の出力ストリーム、または引数として指定されたストリームに送信するメソッドObject#display(ここではdoc )があります。
;(行の終わりで戻り値の出力を抑制するために使用すると、irbでの作業が難しいことがわかりdisplayます。そうすると、ストリームをフラッシュしても、の出力は表示されません。)
なぜそれが機能する必要がありますか?文字列クラスにvoidメソッドが含まれることはめったにありません。標準の静的関数でこれらの文字列を出力できるprintため、これらのメソッドは必要ありません。print注意することが重要です:必ずしもと同じでmethod(someObject)はありませんsomeObject.method()。
あなたは何をstr.printすべきだと提案しますか?
stdoutに印刷しますか?stderrはどうですか?またはファイル?またはシリアルポート?
stdoutへの印刷は実際には特殊なケースですが、どこにでもあるため、見落とされることがあります。
次に、文字列を作成するたびにstrを出力する場所を指定する必要がありますか?
少なくとも私たちは言わなければならないでしょう
"foo".print(sys.stdout)
うまくいけば、それはあなたにもひどいように見えます。それは責任の混乱です
printPython(またはRubyでは、私は信じています)の文字列のメソッドではありません。これはステートメントです(Python 3ではグローバル関数です)。なんで?1つは、印刷できるものがすべて文字列であるとは限りません。どうprint 2ですか?
Rubyのステートメントではなくメソッドを使用したい場合は、メソッドdisplay("test".display)を使用してこれを実現するか、次のような新しいメソッドを簡単に定義できます。
class String
def print
puts self
end
end
このように使用します
"test".print