2016-11-16 5 views
-1

なぜ次のrubyプログラムが2回出力を出力しますか?このコードから2行の出力が得られるのはなぜですか?

a = Proc.new do 
    class A 
    def initialize d 
     @c = d 
    end 

    def print 
     p @c 
    end 
    end 

    b = A.new(2) 
    p b.print 
end 

a.call 

実出力

2 
2 

の予想される出力

2 
+1

私は混乱しています。あなたはそれを2行印刷するとは思わないのですか?これは2行を出力するためです。 –

+1

質問はprocとは関係ありません –

+0

しかし、なぜ2行を印刷しますか?助けてください。 –

答えて

2

次のrubyプログラムは、2回の出力を印刷しない理由?

本のこの最初の印刷である

p @c 

結果は、印刷された値を返しpターン

p b.print 

方法で印刷される、方法printの戻り値となるであろう。同じ出力を持つ2行を得る方法です。

1
a = Proc.new do 
    class A 
    def initialize d 
     @c = d 
    end 

    def print 
    p @c 
    end 
    end 

    b = A.new(2) 
    b.print #you need just to call method print 
end 

a.call 
+1

このメソッドは 'print'と呼ばれています。それは実際に印刷されていない場合は奇妙な、誰かが主張するだろう:) –

+0

@SergioTulentsev確かに、私の間違い)ありがとう!) –

0

ルビーでは、pは両方とも引数を出力して返します。b.printは両方とも出力して2を返します。 p b.printは2をもう一度印刷します。

0

Rubyのコマンド "p"は、あなたが何かを "印刷"したいということを意味します...あなたのコードは "p"コマンドを2回実行します。不要なものを取り除くだけで問題ありません。

a = Proc.new do 
    class A 
    def initialize d 
     @c = d 
    end 

    def print 
    p @C#FIRST PRINT 
    end 
    end 

    b = A.new(2) 
    p b.print #SECOND PRINT 
end 

a.call 
関連する問題