ルビーの簡単な例

3234 ワード

今は前の例のプログラムのコードを解析します。下の例は簡単な例の一つです。def fact(n)       if n == 0            1       else            n * fact(n-1)       end end print fact(ARGV[0].to_i) ""   初めての説明ですので、逐次分析します。def fact(n)  最初の行、def 関数を定義します。私たちは後のセクションで詳しく何が方法かを議論します。ここで、それを指定します。 fact 関数にはパラメータがあります。つまり、 n.if n == 0  if 条件を確認するために使用します。条件が一致したら、下記のコードを実行します。さもなくば、else後のコードを実行します。   条件成立時if の値は 1.else  条件が成立しない場合は、ここからendまでのコードを実行します。 * fact(n-1)  条件が満たされないなら、 ifの値はn乗fact(n-1)の結果になります。end  一番目 end を選択します if ステートメント対応.end  二番目 end を選択します def ステートメント対応.print fact(ARGV[0].to_i) ""  コマンドラインで指定された値でfact()関数を呼び出し、結果を印刷します。ARGVはコマンドラインパラメータを含む配列です。ARGVのメンバーは文字列です。だから、私達はto_を通しなければなりません。i整数に変換する RubyはPerlのように自動的に文字列を整数に変換しません。Hmmm...プログラムに負の値を与えたらパラメータとしてどうなりますか?この問題を見ましたか?それを修復できますか?Stringsの下で文字列のこの章に現れたクイズプログラムをチェックします。これは少し長いので、私達は一行ごとに上ります。01 words = ['フォロワー、 'baz 'quux'02 secret = words[rand(3)]03 print "guss " 05 while guss = STDIN.gets 06   gusess.chop07   if guss == secret 08     print "あなた win「09」     break 10   else 11     print "あなた lose."12   end 13   print "guss " 14 end 15 print "the ワード is ", secret "."  このプログラムでは、新しい制御構造を使っています。 while.ある指定された条件がそのままであれば、whileとその対応するendのコードは繰り返し実行されます。行2のrand(3)は0-2の間の乱数を返します。この乱数は配列を抽出するために使用されます。 words 私たちはSTDIN.gets方法によって標準から一行を入力します。もし行を読む時 EOF (ファイル終了)、 getsはnilに戻ります。したがって、whileに接続されたコードは^D(またはDOS下の^Z)に出会うまで実行されます。入力の終了を表します。行6のgess.chop!取り除く guss の最後の文字;それはきっと改行です。行15です。当てたい言葉をプリントします。私たちが書いたコードは上向です。 print ステートメントは3つのパラメータ(これらの3つのパラメータが次々に印刷されます)を伝えますが、1つのパラメータを使って均等に印刷することもできます。 secretを #{secret}は印刷する一般文字ではなく、値を取る変数であることを示します。 "the ワード is #{secret."   正規表現の最後に、正規表現のセクションを確認します。 最高級 = "\033[7 m"02 en = "\033[m"03 04 while TRUE 05   print "str; " 06   STDOUT.flush 07   str = gets 08   break if not str 9   str.chop10   print "pat> " 11   STDOUT.flush 12   re = gets 13   break if not re 14   c.hop15   str.gsub re "#{st}\&菷{ en}“16   print str "" 17 end 18 print ""  行4で、whileの条件はハードに設定されています。 trueは、このために無限ループを構成しているようですが、私達は8行と13行にbreak文を置いてサイクルを飛び出すようにしています。この二つのbreak文も同じです。 if 修飾語(if) modifier)の一例.一つの「if修飾語」は、条件が満たされているときのみ、その左側の文を実行します。 チョプ (行9と行14が出ます。Rubyでも「!」と「?」いくつかの方法の名前の後ろに付いています。驚嘆符(!時々大きな声で「bang!」と読みます)何かが破壊的であることを暗示しています。つまり、何かが触れたものを変えられます。 チョプ文字列に直接作用しますが、持っていません。のchopは一つのコピーしか生まれません。下にこの違いのデモンストレーションがあります。ruby> s 1 = "forth"  "forth「ruby」 s 1.chop       # This changes s 1.  "fort「ruby」 s 2 = s 1.chop   # This put a. changed copy in s 2,  "for「ruby」 s 1             # ... without disturbing s 1.  "fort"  今後は疑問符で会うでしょう。大声で読んだりします。 "hh?」終了の方法名これは「断言」(predicte)方法を指し、trueまたはfalse.行15に戻るだけです。注意してください。まず、gsubに注意してください。破壊関数でもあります。すべてのマッチを置換します。 re パターン文字を変更します。 str(subの代わりに、頭文字を指します。 g 全体を指す 例えば、最初のマッチだけではなく、すべてのマッチを置換します。ここまでは大丈夫です。テキストの中のマッチ部分を何で代用しますか? 行1と行2の中の 最高級 和 en 反転テキスト色(color-inverted)と通常のテキスト色を復元するANSI符号とがそれぞれ定義されている。 行15において、それらは前に定義されたように解釈されることを確認するためにくくられています。 "\\&".これは小さなトリックです。文字列の入れ替えは二重引用符によって引き起こされます。一対のアンバーは単一のアンバーと解釈されます。だから gsub実際に得られたのは「\」です。特殊コードの一部については、ちょうど「モードと最初にマッチする文字」を表しています。ですから、新しい文字列は印刷された時、元のように見えます。マッチする部分だけを逆視します。 video)の方式は高輝度で表示されます。