Aizu Online Judgeというサイトでこの問題のある他の方が書いたソースコードを見ていたら調べても分からない部分があったので質問させていただきます。
ruby
1stack = [] 2arr = gets.split(" ").map{|i| /\d+/ =~ i ? i.to_i: i.to_sym} 3for i in 0...arr.length 4 if Integer === arr[i] 5 stack.push(arr[i]) 6 else 7 a, b = stack.pop(2) 8 stack.push(a.send(arr[i], b)) 9 end 10end 11puts stack
2行目の
ruby
1arr = gets.split(" ").map{|i| /\d+/ =~ i ? i.to_i: i.to_sym}
が分かりません。
問題とこのソースコードが正解であるということからこの2行目は
gets.split(" ")で入力をスペース区切りで配列として記録して.mapで正規表現をつかって配列の要素それぞれが数字なら文字列から数字にして演算子なら演算子にするということと分かります。
しかしこの行内の「?」と「:」の役割が分かりませんでした。
この行のコードが上記のような役割であることはわかるのでおそらく「?」は「/¥d+/ =~ iでマッチしたら・・・」の「したら」であり「:」は「マッチしなかったら」の「しなかったら」だと思います。
また=~も分からないかもしれません。
マッチしたら組み込み変数$1,$2等に値が返されつつtrueが返されるものだと思っています。
https://docs.ruby-lang.org/ja/latest/doc/symref.html#q
https://docs.ruby-lang.org/ja/latest/doc/symref.html#colon
というような事を質問しようと書いていたら上のコロンのページに書いてありました。
a ? b : c はif a then b else c と同じ意味になるらしいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/15 06:32
退会済みユーザー
2018/07/15 06:43
2018/07/15 08:55