9

Ruby で同じ条件を記述する 3 つの方法を見つけました。

#1
if 1==1 
  puts "true" 
end

#2
puts "true" if 1==1

#3
if 1==1  then puts "true" end

なぜ私はこれを行うことができないのですか?

#4
if 1==1 puts "true"

理解できない:

  1. #3でなぜthenendが必要なのか、そして、
  2. #2を機能させるために順序を変更する必要があるのはなぜですか。

ステートメント #4 は、これを記述する最も自然な方法のようです。なぜそれが不可能なのか理解できません。

4

3 に答える 3

19

" if x then y end" 構文は複数行の条件文用で、" y if x" 形式は簡潔な 1 行の条件文用です。最初のthenケースでは、条件が終了したことを Ruby に伝えるために必要であり (Ruby は C のように括弧を必要としないため)、ブロックend全体が終了したことを Ruby に伝えるために(複数の行になる可能性があるため) 必要です。if

then行末も条件の終わりを示すため、 をセミコロンに置き換えることができます。end複数行でを取り除くことはできませんif。簡潔なワンライナーが必要な場合は、2 番目の形式または三項演算子を使用します。

たとえば、

x = true

以下は true と評価され、y を返します

x ? y :
=> y

同様に、これは false と評価され、何も返されません

!x ? y :
=> 

else の場合は「:」の後に用語を追加します

!x ? y : z
=> z
于 2009-03-10T18:10:57.007 に答える
4

問題は、どちらの方法も実際には自然な考え方です。

これが本当なら何とかしろ

これが本当なら何かをする

見る?Ruby はこのようにして英語の構文に近づこうとします。endはブロックを終了するために必要なだけですが、2 番目のバージョンでは、ブロックはすでに if で閉じられています

実際にあなたの質問に答えるには、 thenendを削除する機会はないと思います。Pascal / Delphi を覚えていますか? あなたもそこにいます。これがないのは、C スタイルの言語だけが一般的です。

于 2009-03-10T16:47:32.170 に答える
0

このように then の代わりにコロンを使用するのはどうですか? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatement isbyreplacethenwithacolon.htm

ショートしたい場合は、さまざまな方法でショートさせることができます。

条件文は、Ruby 構文をより英語らしくするための単なる一部です。

于 2009-03-10T16:52:05.527 に答える