6

私の理解では、ルビーは関数で評価された最後のステートメントを返します。関数がiffalse と評価されるステートメントで終了する場合

def thing(input)
  item = input == "hi"
  if item
    []
  end
end

puts thing("hi").class #> Array
puts thing("not hi").class #> NilClass

この機能 (nilステートメントが false の場合に返す) は気に入っていますが、false(への代入からitem) 返されないのはなぜですか?

4

2 に答える 2

12

ifステートメントの結果としてコードが実行されない場合は、nil が返されます。それ以外の場合は、実行されたコードの値が返されます。Irb は、そのようなものを試すための優れたツールです。

irb(main):001:0> i = if false then end
=> nil
irb(main):002:0> i = if true then end
=> nil
irb(main):007:0> i = if false then "a" end
=> nil
irb(main):008:0> i = if false then "a" else "b" end
=> "b"
于 2012-08-21T19:19:11.437 に答える
5

戻り値は if 式の値であり、条件ではなく評価された句の値です。句が評価されなかった場合 (else がない場合)、nil が返されます。

irb(main):001:0> x = if false
irb(main):002:1> []
irb(main):003:1> end
=> nil
irb(main):004:0> x
=> nil
irb(main):005:0>
于 2012-08-21T19:19:03.203 に答える