スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Ruby]ワンライナーでFizzBuzz問題と,ワンライナーを使う注意点

どうしてプログラマに・・・プログラムが書けないのか?

上記記事を読んで,果たして自分は二分で組めるか?と不安になり書いて見ました.
1.upto(100){|i| i % 3 == 0 ? i % 5 == 0 ? p('FizzBuzz') : p ('Fizz') : i % 5 == 0? p('Buzz') : p(i)}

あとでワンライナーにすることを想定して,三項演算子を三回ネストするというあんまりきれいじゃない描き方で無理やり一行に収めました.

最初,FizzやBuzzの文字列をダブルクォーテーション(")で囲んでいたのですが,いざワンライナーで起動するときエラーが.

そもそも普段ワンライナーでスクリプトをコマンドラインに直接記述して動かすときはシングルクォーテーション(')でスクリプト自体を囲んでいます.

しかし,そうするとイテレーターでループをまわしたときに各要素を収める変数(上記スクリプトだとi)の部分でエラーが出てしまう(理由はよくわからない)ことが分かったので,それ以来ダブルクオーテーションで囲むことにしました.こんな感じで.
ruby -e "1.upto(100){|i| i % 3 == 0 ? i % 5 == 0 ? p("FizzBuzz") : p ("Fizz") : i % 5 == 0? p("Buzz") : p(i)}"

しかし,結局これでもうまく動かず.

どうやら文字列を囲んでいるダブルクォーテーションが気に入らないらしいということが分かったので,中身をすべてシングルクォーテーションにして
ruby -e "1.upto(100){|i| i % 3 == 0 ? i % 5 == 0 ? p('FizzBuzz') : p ('Fizz') : i % 5 == 0? p('Buzz') : p(i)}"

としたところうまく動きました.

どうしてこうやったらうまく動くのかいまいち分かりません.まだまだ勉強が足りないようです…….

テーマ : プログラミング - ジャンル : コンピュータ

コメント
コメントの投稿
管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。