7

print()PythonとRuby(および他の言語)の両方での私の理解は、それが文字列(または他のタイプ)のメソッドであるということです。非常に一般的に使用される構文であるため、次のようになります。

「こんにちは」を印刷

動作します。

では、なぜ"hi".print()Pythonや"hi".printRubyでは機能しないのでしょうか。

4

7 に答える 7

9

のようなことをするとき"hi".print()は、文字列オブジェクト"hi"にメソッドがあることを意味しますprint。これはそうではありません。代わりに、print文字列(または他のタイプ)を入力として受け取る関数です。

于 2012-09-05T00:01:49.440 に答える
4

Rubyには、オブジェクトの表現を現在の出力ストリーム、または引数として指定されたストリームに送信するメソッドObject#displayここではdoc )があります。

;(行の終わりで戻り値の出力を抑制するために使用すると、irbでの作業が難しいことがわかりdisplayます。そうすると、ストリームをフラッシュしても、の出力は表示されません。)

于 2012-09-05T05:31:08.910 に答える
2

なぜそれが機能する必要がありますか?文字列クラスにvoidメソッドが含まれることはめったにありません。標準の静的関数でこれらの文字列を出力できるprintため、これらのメソッドは必要ありません。print注意することが重要です:必ずしもと同じでmethod(someObject)はありませんsomeObject.method()

于 2012-09-05T00:02:19.170 に答える
2

文字列のメソッドではありません。Python 3より前は、これは(またはのように)ステートメントであり、との両方を使用できました。Python 3から、関数に置き換えられたため、次を使用できなくなりました。breakimportprint "hi"print("hi")print "hi"

印刷は機能です

printステートメントはprint()関数に置き換えられ、キーワード引数は古いprintステートメント(PEP 3105)の特別な構文のほとんどを置き換えます。

于 2012-09-05T00:04:29.630 に答える
2

あなたは何をstr.printすべきだと提案しますか?

stdoutに印刷しますか?stderrはどうですか?またはファイル?またはシリアルポート?

stdoutへの印刷は実際には特殊なケースですが、どこにでもあるため、見落とされることがあります。

次に、文字列を作成するたびにstrを出力する場所を指定する必要がありますか?

少なくとも私たちは言わなければならないでしょう

"foo".print(sys.stdout)

うまくいけば、それはあなたにもひどいように見えます。それは責任の混乱です

于 2012-09-05T00:09:10.823 に答える
0

printPython(またはRubyでは、私は信じています)の文字列のメソッドではありません。これはステートメントです(Python 3ではグローバル関数です)。なんで?1つは、印刷できるものがすべて文字列であるとは限りません。どうprint 2ですか?

于 2012-09-05T00:02:37.050 に答える
-1

Rubyのステートメントではなくメソッドを使用したい場合は、メソッドdisplay("test".display)を使用してこれを実現するか、次のような新しいメソッドを簡単に定義できます。

class String
  def print
    puts self
  end
end

このように使用します

"test".print
于 2012-09-05T08:45:33.293 に答える