3

式が空の場合、「elsif」でルビを使用する式を説明できますか?

arg = 3
if (arg == 1)
  puts "1"
elsif (arg == 2)
  puts "2"
elsif
  puts "3"
end

p (1...10).map { |i|
  if (i == 1)
    1
  elsif (i == 2)
    2
  elsif
    3
  end
}

スクリプト出力:

3
[1, 2, nil, nil, nil, nil, nil, nil, nil]
4

3 に答える 3

4

基本的にはもっと言いたいことがあります:

分岐ではif-else、一致条件が見つかるたびに、一致した節の最後のステートメントがif-elseブロックによって返されます。以下を検討してください。

arg = 4
p m = if (arg == 1)
   "1"
elsif (arg == 3)
   "3"
elsif (arg ==4)
   "5";"11"
elsif
   "3"
end

出力:

#11

ただし、各句との照合中に、裸のelsifものが見つかった場合、if-elseブロックはその即時式の真の値をチェックし、それに応じて値を返します。

arg = "4"
p m = if (arg == "1")
   47
elsif 
   10 ; "7" 
elsif (arg =="5")
   12;14
elsif
   2
end

出力:

#"7"

以下のコードは、条件チェックとして使用されるnilため、返すもの10は何もありません。その後、コードには何もありません。なのでnil返されました。

arg = "4"
p m = if (arg == "1")
   47
elsif 
   10 
elsif (arg =="5")
   12;14
elsif
   2
end  #nil

物事を最終的に明確にするために、以下の別のコード:

arg = "4"
p m = if (arg == "1")
   47
elsif 
   nil 
elsif (arg =="5")
   12;14
elsif
   2 ; "44"
end  #44

上記のすべての例で、理由が明確であることを願っています-以下のコード出力:[1, 2, nil, nil, nil, nil, nil, nil, nil]

p (1...10).map { |i|
  if (i == 1)
    1
  elsif (i == 2)
    2
  elsif
    3
  end
}

最初のコードに答えるには、まず以下の 2 つを見てください。

m = if puts "hi"
p "hello"
end #"hi"

"hi" は、結果として評価された句が出力されないリターンとして出力されputsます。しかし、以下のコードはそこで使用されているとおりに機能し、句は戻り値である で実行されました。niliffalsehellopifptrue

m = if p "hi"
p "hello"
end 

#"hi"
#"hello"

3全体として適用された上記のすべてのロジックから、以下のコードからの出力として出力される理由を理解していただければ幸いです。

arg = 3
if (arg == 1)
  puts "1"
elsif (arg == 2)
  puts "2"
elsif
  puts "3"
end
于 2013-04-04T15:29:02.497 に答える
0

以前の評価と一致しなかったことによるフォールスルーではなく、反復している要素が空白であるかどうかを知りたいと仮定すると、次のようになります。

elsif i.blank?

キャッチオールが必要な場合は、次を使用します。

else
于 2013-04-04T16:21:45.470 に答える