Ruby 初心者スレッド Part 66
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語 Rubyについての、初心者向けスレです。質問・要望・雑談などをどうぞ
質問するときは、OSやRubyのバージョン、エラーメッセージを書いて下さい。
Ruby on Rails については、WEBプログラミング板で
前スレ
Ruby 初心者スレッド Part 65
https://mevius.5ch.net/test/read.cgi/tech/1545421414/
るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/
Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby コミュニティ公式
https://www.ruby-lang.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured xy4_02.txt → xy4_002.txt
みたいに、ファイル名末尾の数字部分を、3桁0埋めにする処理で、
文字列を左右反転して、後ろから処理しているのですが、
02 反転→ 20 (0埋め)→ 200 反転→ 002
format・sprintf で、- 左詰め、0埋めにしても、0埋めできません!
0埋めは、右詰めでしか使えない!
"%03d" % "20" # "020"
"%-03d" % "20" # "20", 200 にならない!
一方、JavaScript では、両方向で0埋めできますが、
Ruby にも、こういう関数がありますか?
"20".padStart( 3, "0" ) // 020
"20".padEnd( 3, "0" ) // 200 >>311
pry> "20".ljust(3, "0")
=> "200"
pry> "20".rjust(3, "0")
=> "020"
Stringのメソッドに目的のものがないかどうかを最初に探そう
https://docs.ruby-lang.org/ja/latest/class/String.html "%03d" % "02" # "002"
では、何か不味いのか 0 で始まる文字列は、8進数と解釈されるのか、08, 09 などでエラーになる!
"%03d" % "07" # OK
"%03d" % "08" # エラー
>>313
ありがとう "%03d" % "08".to_i #=> "008" 先頭から続く、0 は鬼門!
それらを除去したい。よい方法は?
0080 → 80
123 → 123
"" → ""
000 → "" >>317
>000 → ""
“000”のleading zeroを除くと“0”では? 先頭から続くかぎり、除去するので、これで良いです。
000 → ""
これは、自作するのは難しい。
プログラミングのお題に出してみようか そっか、じゃ正規表現だね
"000".sub(/^0+/, "") #=> ""
"123".sub(/^0+/, "") #=> "123"
"0080".sub(/^0+/, "") #=> "80" >>319
修正
0 → ""
000 → ""
やっぱり、これらは空文字列よりも、0 にした方が良さそう
0・000 → 0 プログラミングのお題の方に書き込んだので、このスレから移動してください! >>322
有名な荒しだよ
>>323
誰もお前の独り言に興味ないから一人で行け。
いや、向こうのスレに迷惑をかけるな。 >>324
この板の荒らしって単芝君くらいしか知らんかったわ >>323
お題スレは質スレじゃないんだから並行してても別にいいよ
あそこはお題に対してこんな解き方もあるんやでを披露しあって楽しむ処 >>325
いくつかのスレのタイトルにRuby禁止と書かれているのは、そいつか原因になっている。
活発に活動していて、コテもつけてないが書きっぷりで一目で分かるので目障りきわまりない。 Windows 10, WSL, Ubuntu 18.04 で、
rbenv で、Ruby 2.6.5 をインストールして、
PowerShell で、wsl と入力し、
Windows 側のプロジェクトフォルダへ移動してから、
Gemfile に、gem "rails"
と書いて、bundle install と入力すると、
nokogiri 1.10.9 with native extensions のコンパイルに数分掛かったが、
エラーもなく、rails 6.0.2.2 がインストールされた!
でも、SQLite, Node.js などが無いけど 初歩的な質問ですみません
print(”Hello, Ruby.\n")と打つと
デバイス PRN を初期化できません
とエラーが出ます。たのしいRubyの手順通りにしたのですが
こう表示されてしまいます。本にはこのエラーの対処法が載っていないので
困っています。ご教授お願い致します。 >>330さん
ググったのですが意味が解らず…
DOSプロンプトで見たらインストールは正常にされたみたいです。
詳しく教えていただければおっぱい見せます。 >print(”Hello, Ruby.\n")
全角文字、(” を使っちゃいけない!
プログラミングは、半角英数字しか使えないので、すべて半角英数字で入力し直すべし!
print("Hello, Ruby.\n")
特定の条件では、( ) を省略できるので、これでも良い
print "Hello, Ruby.\n"
また、puts なら自動的に改行されるので、最後の改行コード・\n が不要
puts "Hello, Ruby." >>332さん
ありがとうございます。頑張ってみます。 コマンドプロンプトなら実行できるのにRubyコマンドではできません。なぜでしょうか? 普通は、ソースコードをファイルに書いて実行する。
ruby script.rb
-e オプションで、1-liner も実行できる。
ruby -e 'puts "a"'
Windows のPowerShell では、%Q("a") とダブルクォーテーションを、%Q( ) で囲まないと動かないこともある
ruby -e 'puts %Q("a")'
VSCode などのエディターを使うのがよい >>336さん
Visual Studio code インストールしました。
エディター、よくわかっていません…
妹の食事を作りつつ勉強していますが難しいですね。
中3女子には難しいでしょうか? 小6じょちのあたちにもできたんだから
おねぇちゃんののうりょくがないだけだよ >>335
「えんぴつなら書けるのにボールペンでは書けません。なぜでしょうか?」って書いてるのと同じ
これ答えられる?
どういう環境で何をやろうとしてるかもわからない
コマンドプロンプトで何ができたのかもわからない
Rubyコマンドで何がどうできないのか、どういうエラーが出てるのかもわからない
プログラミングに限らず人に質問して自分の欲しい答えを引き出すには最低限の質問力が必要 すみませんんでした。
Rubyコマンドで
print("Hello, Ruby.\n")
と打つと
デバイス PRN を初期化できません
と表示されます。
コマンドプロンプトで打つと実行できます。irbだと実行できるのは解ったのですがなぜRuby
で実行できないのかがわからなかったんです。ググってみても、「たのしいRuby」を
読んでも記載されていません。 環境はWindows10で
Ruby2.7.1です。
Visual Studio codeをインストールして日本語にできました。
エディタ−の使い方を勉強しています。
恥を忍んで質問しました。すみません。 >>341
何をやってどういう結果になったかを、相手に伝わるように正確に書くこと。
おそらくそれができていないから、実行した画面のキャプチャを撮って張り付けること。
>>337みたいなどうでもいい情報を書く前に、どうしたら欲しい回答が相手から得られるかを考えなよ。 >>341
古い版の「たのしいRuby」があったから見てみたけど
print(“Hello, Ruby.¥n”) と書いたhelloruby.rbというファイルを作成して
それをCドライブのsrcフォルダに保存してから
コマンドプロンプトで
>cd c:¥src
>ruby helloruby.rb
とやれって書いてるよ
「デバイス PRN を初期化できません」ってエラーが出るってことは
コマンドプロンプトに直接 print(“Hello, Ruby.¥n”) と打ち込んでるんじゃないの?
irbははinteractive ruby shellの略で対話型で1行ずつ書いたコードを実行する環境の名前で
irbコマンドはその環境を起動するコマンド
rubyコマンドは基本的にrubyのコードを書いたファイルを渡してプログラムを実行するためのコマンド メモ帳notepad.exeで、ファイルをつくれ? Rubyコマンドっていうから端末でruby起動して標準入力からコード書いてんのかと思ったら自作ワードだったか パス通ってんなら「puts "Hello, Perverts!"」って内容のhoge.rbをダブルクリックすれば実行されんじゃないの?
ウィンドウズ知らんけど
WSL独り言連投君よ、今こそ君の知識を授けてあげなよ(笑) エディタは、VSCode だけを使ってください!
メモ帳などを使うと、BOM の有無・文字コード(UTF-8, CP932(sjis, shift-jis))などで、ややこしい
VSCode の下に、改行コード・文字コードが表示されるので、そこをクリックして変更してください。
Windows なら、UTF-8 で、改行コードはCR/LF です
VSCode では、まず、3つの拡張機能を入れる。
Code Runner(Run Code), Bracket Pair Colorizer, indent-rainbow
Code Runner では、そのスクリプトファイル全体、または選択したコード片を、
右クリックメニューから実行できる
require 'ファイルパス'
などの相対パスが解決できない場合は、パスを探す基点となるフォルダを、
ユーザー・ワークスペース・フォルダの、どれかの設定項目に追加してください
Code-runner: File Directory As Cwd
Whether to use the directory of the file to be executed as the working directory.
まあ、VSCode の詳細は、VSCode のスレで聞いてください >>341
エクスプローラーで適当なフォルダを作って、
そのフォルダをVSCode の左のサイドバー上のエクスプローラービューへドラッグ&ドロップすれば、
そこがワークスペース(プロジェクト)フォルダになる
エクスプローラービューの上の「新しいファイル」アイコンを押して、適当なファイルを作る。
例えば、script.rb
そのファイル上に、
print("Hello, Ruby.\n")
と書いて、それを選択して、または、ファイル全体を保存して、
右クリックメニューから、Run Code を起動すると、Code Runner で実行できる
VSCode の使い方は、ヘルプのようこそとか、対話型プレイグラウンドで学べる 基本的に、サンプルのコード片などは、全てVSCode のCode Runner で実行してください!
Windows のirb は、日本語入力でバグルので、使わない方がよい
基本的に、web 系の言語は、インターネットのLinux サーバーを対象にしているので、
パソコンのWindows などでは、動かないことが多い。
様々なライブラリを作る人が、Windows 用には作らないので
そのため最近では、Windows 10, WSL 上に、Ubuntu 18.04 など、
Linux を入れて使うことが多くなった
VSCode からは、Remote WSL という拡張機能で、Linux側へアクセスできる
初心者の間は、WSL, Linux などは関係ないけど >>349さん
皆さんありがとうございます。拡張機能でCode Runnerインストールして
ファイル上にprint("Hello, Ruby.\n")と入力、保存して右クリック、これでRuby動く!
と思ったものの、何も起きません…
私のようなバレーボール馬鹿にはプログラムは向いていないんでしょうか…
夕食後、もう一度やりなおしてみます。 ただし、ファイル名が、script.rb みたいに、
Ruby の拡張子、.rb を付けること
それで、そのファイルをRubyで実行すると、判断されるはず! >>348さん
Code Runnner 実行できました。皆さんありがとうございます。
ただ次のステップ、VSCode実行からどうしたらいいでしょうか? そもそも初心者がVSCode使う意味が分からん。
Hello, world.レベルならirb使ってちまちまやった方が絶対勉強になる。
日本語入力に不安があるならコマンドプロンプトに「irb --noreadline」って打って起動すれば問題ないだろう。 そもそもRubyの公式エディタはEmacs
VSCodeは邪悪なMSの製品である上に、JavaScript製のAtomを殺したTypeScript製のVSを使うことは動的型に対する静的型付けの勝利を認めることになる
絶対に使ってはならない Emacsは初見殺しなんで
絶望的に初心者に向かない 製品の詳しいことは解らないんですがそんなにだめなんでしょうか?
脳筋の私でもなんとか理解できてきたような気がするんですが… VSCodeはデフォルトの設定で使うなら
別にそんなに難しくないと思う
なんだかんだMSだからExcelとかと同じで
普通の人が普通に使えるようになってる 皆さんなんだかんだ言っても優しいですね。Rubyを選んで良かったです。 >そもそもRubyの公式エディタはEmacs
これいつもの荒らしの口癖
本人はRubyもEmacsもまともに使えない ホントの初心者ならirbだけでよい。
それでちょっとまとまったことやりたくなったらメモ帳でも使えばよい。
いきなりVSCodeって、工作好きの子供にいきなり電動ドリルやチェーンソウを買い与えるような仰々しい印象なんだが。
まあ畢竟、外野が強制するものでもないし好きなものを使えばいい。 >>354
> Hello, world.レベルならirb使ってちまちまやった方が絶対勉強になる。
勉強とは何をやったか記録すること
irbでどうやって記録に残すんだ?あん? >>362
初心者をバカにするな。
「お前は初心者だからプロと同じものを使うな」は
初心者をバカにする行為でしかない。そんな偉そうな人間でもないだろお前は Hello worldなんて頭の中に記録できればログ記録しとく必要なんかないやろ >>363
記録を目的にしたら本末転倒だろう。
最初のうちは色々入力して試行錯誤し、自分の頭で考えたり成功や失敗を繰り返し経験することのが大事。
まずは書き捨てていいからとにかく試して自分の理解がある程度整理できるようになってから残せばいい。 >>363
>勉強とは何をやったか記録すること
それ記録じゃなくて記憶の記憶違い >>363
デフォルトで~/.irb_historyに1000行まで記録されてる
(2.6まではデフォルトでは履歴は無効、2.7からデフォルトで有効)
出力を含めた作業ログをファイルに残したいならそういう機能を持ったターミナルを使う
WindowsならPowerShellでStart-Transcript >>363
絶望的なまでに頭が悪いなお前
それ読んで馬鹿にされたと思うのは劣等感の塊で自意識過剰なお前くらいだろ
そしてお前はirbのこと馬鹿にし過ぎ
教育現場でとっかかりとしてREPLを通して学ばせるなんて日常茶飯事だわ
東大でも準必修でRubyをirbを使って教わったぞ >>366
いろいろ試行錯誤する時に、
あれ?さっきなんて入力したっけ?
ってなったら意味ないだろw
コードをじっくり見ないといかんし
勉強っていうのはタイプすることじゃないぞ
自分で何を書いたかを理解することだぞ >>370
ctrl+rやctrl+pも知らない馬鹿がなんか言ってる というか入出力の履歴が保存されてる件はスルーなのか
荒らしだなこれは >>371
その程度の話なら画面スクロールでいいだろw
アホかw >>373
端末の表示バッファ超えててもctrl+rや保存された履歴は有効なんだが底辺の底よりも頭悪いなお前 >>374
お前あれだろ、黒板の板書をそのまま書き写して勉強した気になってたやつだろ?
自分なりに整理して書かないやつがログとってても何の勉強にもならんよw 「irbでどうやって記録に残すんだ」とか馬鹿なこと言うからみんなからさんざん論破されてんのに意味不明すぎて笑える 初心者は、VSCode で、Code Runnner を使うべき!
メモ帳は、文字コード・BOM の有無で動かないから、使っちゃいけない!
web 系は、BOM 無しUTF-8 だから、メモ帳みたいな、BOM 付きUTF-8 はダメ!
Windows の文字コード、CP932/Windows-31J(shift-jis, sjis)も使っちゃいけない!
irb は、日本語入力でバグル。
複数行の構文も、ややこしい
if 条件式
else
end >>377
irbでたバイト文字でバグらないようにすることは可能だし
Windows10のnotepadはBOMつきのUTF-8では保存できねえよ >>376
だからお前の言うirbの記録=何の整理もしてない実行ログだろ?
あとから見ても何もわからない。これかなーって実行してエラー発生w >>378
BOMつきのUTF-8で保存できるが? >>363
>>367
勉強とは記録や記憶から
本質的な情報を抽出することだろう >>382
違います
学習とは「経験によって生じる比較的永続的な行動の変化、それを生じさせる操作、及びその過程」です
有名なパブロフの犬や迷路実験も学習の一種です
犬やネズミや昆虫等は記録を行いませんが学習しています Code Runnner 実行できました。簡単なコードですがRubyで実行したいです。
どうしたら良いのでしょうか? VSCode の左側のファイルエクスプローラーで、
ファイルを右クリックして、右クリックメニューでターミナルで開くと、
そのファイルがあるフォルダで、PowerShell が起動する
ruby script.rb
みたいに、そのファイル名を引数にして、rubyコマンドを実行する
端末では、タブ文字で入力補完もできる
例えば、ruby scr で、タブ文字を押すと、
ruby .\script.rb みたいに、パス付きで補完される
\ は、バックスラッシュと同じ。
Windows では普通のスラッシュ、/ もパスとして使える
ruby ./script.rb
. は、今の(カレント)フォルダ >>383
いやいや
情報を抽出することと
行動を変化させることは
同じことを違う角度で見てるだけでしょ
脳の回路を変化させていることを
どう表現するかという違いでしかない >>385
できました!PowerShell を起動させることでRubyが実行できるんですね。
ありがとうございます! PowerShell・コマンドプロンプトから、ruby コマンドを実行できる
それらを、VSCode 内から起動せずに、単独で起動しても実行できる。
cd などのパスの移動コマンドも使える
cd ..
で、親フォルダへ移動するとか
cd ../..
で、親の親フォルダへ移動するとか
フォルダ内の中身を見るのに、
PowerShellなら、ls
コマンドプロンプトなら、dir
コマンドプロンプトよりは、PowerShellのコマンドの方が、
Linux コマンドと同じものが使えるので、覚えやすい >>388
ギギギ…わかりません…
明日もバレーの練習終わったら勉強します。ありがとうございます。 >>389
puts "Hello, World!"
とかいたscript.rbをどっかに保存しておく。
保存したフォルダでshiftを押しながら右クリックから「コマンド ウィンドウをここで開く」を選択。
出てきたコマンドプロンプトに
ruby script.rb
と打ち込めばよい。
もしくはパスが通ってるならそもそもscript.rbをダブルクリックするだけで実行される。
puts "Enterキーを押すと終わるよ"
gets
で保存して試してみるといい。 エクスプローラーのフォルダの上で、
shift キーを押しながら、右クリックすると、
PowerShell を、このフォルダで起動すると出る!
同様に、WSL を入れていれば、Linux シェルも起動できる
ちなみに、PowerShell・コマンドプロンプトを終了する時は、
exit と入力するか、ウインドウを閉じる
cd, ls, exit など幾つかは、PowerShellの基本コマンドも知っておいた方がよい >>388
Linuxと同じでもないし、同じだとしても別に覚えやすくはねえよ。
おまえがBashに慣れとるだけやろ。w
PowerShell もそれなりにクセがあるから、どっちもどっち。
まあ、今さらcmdはないやろ、というならわからんでもないが。 returnでは現在のメソッドしか終了できませんが、呼び出し元のメソッドごと終了させる方法はありますか?
各メソッドにフラグをチェックするメソッドを入れたのですが、フラグが条件を満たさなかったらreturnとするとフラグチェック用のメソッドが終了するだけになってしまいます
呼び出し元でフラグチェックメソッドの下にreturn if と入れればできますが毎回2行使ってしまうのでできれば1行に納めたいのですが… >>394
- 例外
- catch and throw
- block/proc
- &.
など
いろいろやり方あるけど処理内容とプログラムをどう構造化したいかによって選択肢が変わってくる >>394
>return if と入れればできますが
できてるじゃん!
普通のIF文でもできるでしょ?
>毎回2行使ってしまう
行数が1行か2行かなんて気にしなくていい
それから例外を通常の条件分岐に使うのは
便利でも一般的にはあまり推奨できないな
もしもっと複雑な状態遷移に発展するなら
そもそも呼び出すメソッドを切り替える
仕組み(ステートパターンとか)も考えたい exit で終了できる。その例外は、SystemExit でキャッチできる。
ただし、exit! では、例外をキャッチできない
at_exit で終了直前の処理を書く。
ただし、後に書いたものから、先に実行される
他には、Signal.trap(:INT, "EXIT")
"EXIT"を指定した時は、シグナルを受け取ると終了処理を行ったあと、ステータス 0 で終了します
at_exit { puts "1" }
at_exit { puts "2" }
begin
exit
rescue SystemExit
puts "例外をキャッチ"
end
出力
例外をキャッチ
2
1 Windows 10, WSL, Ubuntu 18.04 で、Rails 環境を構築するために、
nodejs も必要なので、既にインストールしていた、rbenv 環境を削除して、
anyenv で、rbenv, nodenv を管理することにしました
マイクロソフト、Rails Girls などは、バージョンマネージャーに、NVM を使っているようですが、
anyenv なら、使い方が同じなので楽です
rubyのコンパイルに、20分ほど掛かって、
ruby 2.6.6, node 12.16.2 を入れました! 192.168.7.21騒動見てたらあるハッカーの顛末を思い出した 漢数字が、順番に並んでいない!
ary = %w(一 二 三 四 五 六 七 八 九 十)
ary.sort!
p ary #=> ["一", "七", "三", "九", "二", "五", "八", "六", "十", "四"]
re = /[一-十]/
p "四".match( re ) #=> nil
p "七".match( re ) #=> "七" 文字は文字コード順に並ぶやろから当然やな
漢数字は数字ちゃうねん >>401
アラビア数字でソートなり処理して
表示する時だけ漢数字に変換するのが
一番簡単だし確実だと個人的に思う >>401
>>405
一回きりの簡単な処理ならともかく
数量データの規模が大きかったり
複雑な計算をしたりするときは特にね
漢数字で科学計算とかやりたくないでしょ? >>401
require 'ya_kansuji'
array = %w(八京 2垓 1兆 壱萬 一兆 四 89 五 一 六 二 七 八 三 九 十 百 二十)
array.sort_by{|x| YaKansuji.to_i(x)}
#=> ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十",
"二十", "89", "百", "壱萬", "一兆", "1兆", "八京", "2垓"] ■ このスレッドは過去ログ倉庫に格納されています