print()
PythonとRuby(および他の言語)の両方での私の理解は、それが文字列(または他のタイプ)のメソッドであるということです。非常に一般的に使用される構文であるため、次のようになります。
「こんにちは」を印刷
動作します。
では、なぜ"hi".print()
Pythonや"hi".print
Rubyでは機能しないのでしょうか。
のようなことをするとき"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)
うまくいけば、それはあなたにもひどいように見えます。それは責任の混乱です
print
Python(またはRubyでは、私は信じています)の文字列のメソッドではありません。これはステートメントです(Python 3ではグローバル関数です)。なんで?1つは、印刷できるものがすべて文字列であるとは限りません。どうprint 2
ですか?
Rubyのステートメントではなくメソッドを使用したい場合は、メソッドdisplay("test".display
)を使用してこれを実現するか、次のような新しいメソッドを簡単に定義できます。
class String
def print
puts self
end
end
このように使用します
"test".print