2016-08-26 6 views
-1

propに値が割り当てられます。そうすれば、この例ではtest_it?への電話が真実になるはずです。代わりに、test_it?はnilを返します。私は間違って何をしていますか?ここでなぜこの真実ではないのですか?

class ClassA 
    attr_accessor :prop 

    def test_it? 
    @prop 
    end 

end 

a = ClassA.new 
a.prop = "test" 
if puts a.test_it? 
+0

「Class.new」を使用していて、実際には「Class.new」ではなく、再現できません。あなたの見本はあなたが見ているものを生み出すのに十分であると確信していますか?もしそうなら、どのバージョンのRubyを使用していますか? – Ryan

+0

編集されました。最後の行に 'if'を追加しました。それは本当に戻らなければならない?代わりに、私はゼロになる。 – 4thSpace

+0

いいえ、 'true'を返してはいけません。このドキュメントではっきりと分かるように、['Kernel#puts'](http://ruby-doc.org/core/Kernel.html#method-puts)は、' 'false '*である' nil'を返します。 'else'ブランチが実行されます。これは存在しないため、' nil'と評価されます。 –

答えて

2

@propがfalseかnilでない場合はtrueに評価するif文をしたい場合、あなたは

if a.test_it? 
    # code to execute unless statement is false or nil 
end 

を行う必要がありif文は真と評価されます。したがって、@proptestに割り当てると、ifステートメントは真となり、ifのコードが評価されます。

6
if puts a.test_it? 

、あなたはnilある条件としてa.test_it?が、putsの戻り値を使用していません。

関連する問題