ProgI/FAQのページ
演習に関するよくある質問とそれに対する回答です。
最終更新日時:2022-08-11 (木) 23:00:28
項目
質問と回答
シーエックスシーエスとか,先生・TAが何を言っているかわからない †
Meadowなどemacs系のテキストエディタでは,
CtrlキーやAltキーを多用して保存や終了などのコマンドを使用します.
例えば,Ctrlキーを押しながらxキーを押し,
その後Ctrlキーを押しながらsキーを押す(保存のコマンド)をCtrl-x Ctrl-s,
もしくはC-x C-sと記述し,コントロールエックスコントロールエスや,
シーエックスシーエスと読みます.
同様にAltはオルトもしくはエー,RETはリターンもしくはエンターと読まれます.
C-x RET f(文字コード変更はシーエックスリターンエフ)
ファイル名を変えたい †
C-x C-w
同じコマンドを何度も打つのが面倒 †
大体の環境(少なくともこの演習環境)では,カーソルキー(↑と↓)を押すことで
以前入力したコマンドを出すことができます
コマンドプロンプトで日本語入力ができない †
Alt+半角/全角
昔はそうでした.
参考…コマンドプロンプトで日本語入力を行う
コマンドプロンプトから実行しようとすると,No such file or directory -- ****.rb (loadError)と表示され実行できない †
その名の通り,実行対象のファイルが存在しない時に発生するエラーです.
DIRコマンドを使ってまずファイル名があるかどうかを確認してみてください.
- C-x C-fやC-x C-wでファイルを保存する時に,保存場所を間違えた(例えば/~bin/以下など)可能性があります.
この演習では,Z:\progI/以下で作業することを推奨していますが,きちんと保存できているかどうかを確認してください.
- 拡張子.rbを付け忘れた可能性があります.
コマンドプロンプトから実行しようとすると,private method *** called for nil:NilClass? と表示され実行できない. †
例えば,***にあたるメソッドがprintの場合,
printにnilが渡されている場合に表示されるエラーです.
キーボードからの入力でnilを入力することはできないため,
リダイレクトでの入力 ( hoge.rb < piyo.txt)などの場合に
piyo.txt内に入力とみなされる文字列が無いとこのエラーが返ってきます.
この場合の入力とは,改行までを1入力とみなしているため,
例えばgetsを10回行う場合,10行しか対応するデータが無い
(10行目に改行が無い)とダメです.
ちなみに,この場合に限らずプログラムの最後が空行で終わらないと
何かとエラーが起きやすいので,何かしらのファイルを作成する際は
最後に必ず改行を入れるようにしましょう.
コマンドプロンプトで実行結果をコピーできない †
こちらをご確認ください.
→実行結果をファイルに保存する方法
プログラムを途中で止めたい/止まらないプログラムを実行してしまった †
C-cを押すことで,強制的にプログラムを止めることができます.
Rubyだと,永久ループするようなコード,例えば
i = 0
while i < 10
print i
end
のようなコードを書いても事前に検知することはできないため,
是非とも覚えておきましょう.
"String can't be coerced into Fixnum"と出て足し算がうまくいかない †
読めばわかるように,Fix型にString型を足そうとした場合に出るエラーです.
getsメソッドで入力した何かは,数のみであろうと文字列扱いとなっていることに注意してください.
Meadowの画面が2つに分かれて見にくい †
表示しておきたいウィンドウにカーソルを合わせ,C-x 1
Meadowの設定は正しいのに日本語の表示結果が変なんですが... †
print("飲酒可能\n")
を実行すると,
飲酒可能n
となってしまいます.
その場合は-Ksオプションを利用しましょう。
実行の際、
ruby -Ks スクリプトファイル名
とします。
ハッシュのeachメソッドで出力される順番と格納した順番が違うのですが,正しいのでしょうか. †
ハッシュのeachメソッドで出力される順番と教科書の出力順番(p.41)が違うのですが,正しいのでしょうか. †
ハッシュの特徴として順番がないことが挙げられます。
そのため、eachメソッドを用いてキーと値を取り出すとしても、
格納した順番で取り出すことができず、どの順番で取り出されるかはわかりません。
(教科書 p. 39, 379 参照)
実行結果の日本語が文字化けしてしまうのは何が原因でしょうか. †
Meadowの文字コードが正しくない可能性があります.
- 最初に
M-x set-buffer-file-coding-system
と入力しEnterキーを押す.(M-xはAltキーを押しながらx)
- 次に
sjis
と入力してEnterキーを押す.
ステータスバーの左端の表示が,S\--となっていればOKです.
ステータスバーの左端の表示が,=\--になってしまった(プログラム中の文字は文字化けしていない) †
Meadowの文字コードが emacs-mule になってしまっています.
プログラム中の文字が文字化けしていないなら,別の文字コードに「変更」すれば大丈夫です.
- まず,次のように入力する
C-x RET f
- 次に,変更したい文字コードを入力する.Shift-JIS にしたいならば次のように入力する
shift-jis
プログラム中の文字が文字化けしてしまった. †
編集中にMeadowの文字コードが変わってしまったと思われます.
この場合,現在のファイルを別の文字コードで「読み込み直し」ます.
- まず,次のように入力する
C-x RET r
- 次に,変更したい文字コードを入力する.Shift-JIS にしたいならば次のように入力する
shift-jis