0

こんにちは、以下の2つのブロックを見つけてください。

ブロック-I

irb(main):001:0> s="acbbdd"
=> "acbbdd"
irb(main):002:0> /e/=~s
=> nil
irb(main):003:0> if /e/=~s then
irb(main):004:1* print "h"
irb(main):005:1> end
=> nil

ブロックII

irb(main):001:0> s="acbbdd"
=> "acbbdd"
irb(main):006:0> if /c/=~s then
irb(main):007:1* print "h"
irb(main):008:1> end
h=> nil
irb(main):009:0>

=~でどのように機能しIIIブロックするかを理解するのを手伝っていただけませんか?最初のブロックでは一致せずに戻りますnilが、2番目のブロックでnilはどうなっていますか?

4

2 に答える 2

3

最初のブロックでは、文字列が一致していません/e/-にありeません"acbbdd"

2番目のブロックでは、文字列は一致します-/c/にがあります。c"acbbdd"

が表示される理由nilは、それがの戻り値であり、したがってブロックprint全体の戻り値であるためです。if

于 2013-01-25T11:08:53.803 に答える
1

ではII、/ c /はsと一致するため、print "h"getが実行されます。printステートメントから出力(文字列 "h")と戻り値を取得します(nil)

次に、ifブロックは、ブロック内の最後のステートメントの戻り値(この場合はnil)を返します。

一緒に実行print "h"すると、同じ結果が得られます。

于 2013-01-25T11:13:24.833 に答える