5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Ruby 初心者スレッド Part 37

1 :デフォルトの名無しさん:2010/05/18(火) 03:37:57
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
 文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
 1.8.7 は 1.9 系の新機能のいくつかが利用可能なため、1.8.7 を習得すればスムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
 ・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
 ・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

755 :デフォルトの名無しさん:2010/08/02(月) 10:27:00
マルチはご法度

756 :デフォルトの名無しさん:2010/08/02(月) 10:28:19
754 自己解決しますた。

757 :デフォルトの名無しさん:2010/08/02(月) 10:35:07
http://pc12.2ch.net/test/read.cgi/tech/1274121477/755 投稿日:2010/08/02(月) 10:27:00
http://pc12.2ch.net/test/read.cgi/tech/1274121477/756 投稿日:2010/08/02(月) 10:28:19
http://pc12.2ch.net/test/read.cgi/tech/1276128624/397 投稿日:2010/08/02(月) 10:29:10
全部自分で書かないといけないから投稿制限の1分しか待てないよなあ

758 :デフォルトの名無しさん:2010/08/02(月) 10:41:42
>>754
普通、irb は $KCODE か ruby -Ku 相当を設定してから使う
ruby 実行に -K オプションを普通はつけるのと全く同じ理屈

初期状態を尊重して「化け」てる状態のままにしている人のほうがたぶんレア
むしろ、「化け」ないようにしておくほうが -K オプションとの関連でも健全かと

759 :デフォルトの名無しさん:2010/08/02(月) 10:43:18
>>757
755以外のレスをした記憶はないなあ
LLスレは何でも食いつくから、むしろ放置w

760 :デフォルトの名無しさん:2010/08/02(月) 10:44:46
>>758
マルチだって

761 :デフォルトの名無しさん:2010/08/02(月) 10:52:37
>>760
たぶんマルチじゃねえよ
初心者スレに投稿した直後に、Rubyの話題が出てるLLスレへ改行を削ってコピペするような質問者はおらん

ttp://pc12.2ch.net/test/read.cgi/tech/1276128624/393の失敗は、この板のスレで質問をしたことがなかったことだ
この板のスレで質問したことのある人の中には
「適当なアンチ系スレに自分のレスをコピペされた」
という経験を持ってる人が何人かいるはず
これまであまりに何度も行われてるものだから、耐性がついてしまった人の絶対数が増えてる

762 :デフォルトの名無しさん:2010/08/02(月) 10:57:36
Windows版のRubyパッケージのirbは昔デフォでShift_JISの設定がされてた記憶
今はプレーンだが

763 :デフォルトの名無しさん:2010/08/02(月) 11:36:55
netbeans6.9にruby1.19-p429をいれたら、ソースを実行するたびに

Error loading gem paths on load path in gem_prelude
can't modify frozen string
<internal:gem_prelude>:69:in `force_encoding'
<internal:gem_prelude>:69:in `set_home'
<internal:gem_prelude>:38:in `dir'
<internal:gem_prelude>:76:in `set_paths'
<internal:gem_prelude>:47:in `path'
<internal:gem_prelude>:286:in `push_all_highest_version_gems_on_load_path'
<internal:gem_prelude>:355:in `<compiled>'

っていうエラーが出るようになった(でもソース自体は実行できてる)・・・
PC買い替えで新規に入れたからどこか設定抜けてるんだろうか、誰か助けてorz

764 :デフォルトの名無しさん:2010/08/02(月) 11:48:17
>>763
>netbeans6.9にruby1.19-p429をいれたら
はruby1.91-p429の間違いです。

765 :デフォルトの名無しさん:2010/08/02(月) 12:08:51
マルチポストはたのしい。
まず質問があちこちにひろがる。
んで、あちこちで回答がつく。
するとなぜか怒りながらそれらをリンクしてくれる人がいる。
すると別々の視点で行われた回答をマージできる。
自己組織化っていうのかな、これ。たのしいね。

766 :デフォルトの名無しさん:2010/08/02(月) 12:14:52
>>765
それは楽しいんじゃなくて便利って言うんだよ。
で、そのプロセスを想像したお前が楽しんでるだけだ。

767 :デフォルトの名無しさん:2010/08/02(月) 13:42:46
OK Waveとか教えて何とかクンとかの質問サイトなんてシステム的にマルチポストするようになっている時代なんだし
マルチと思ったらスルーすればいいだけ
osieteなんとかとかMSNのなんとかにいちいちマルチだシネとか書き込んでるのかよ

768 :デフォルトの名無しさん:2010/08/02(月) 15:30:44
教えて何とか系のQAサイトは、一つのQAシステムに、複数のビューが付いてるようなもんだと
思っている。

769 :デフォルトの名無しさん:2010/08/02(月) 17:59:39
全ての行の末尾に句点(「。」)を加えるプログラムが欲しいのですがなかなか作れません。

「input.txt」が入力ファイル、「output.txt」が出力ファイルになるようにして以下のように書けばいいのは分かるのですが、
中身の部分が問題なんですよね。

open("output.txt","w"){|oi|
open("input.txt"){ |io|
……
}
}

どなたかよろしくお願いいたします。

770 :デフォルトの名無しさん:2010/08/02(月) 18:20:27
タグ: 先生仕事してください ここに病院を建てよう 質問してみた uy先生 時間の無駄遣い 効率厨 無駄に無駄のない無駄 頭おかしいシリーズ

771 :デフォルトの名無しさん:2010/08/02(月) 18:20:50
io.each_line{|ln|
oi.write ln.sub(/$/){"。"}
}

でどうかな?

772 :デフォルトの名無しさん:2010/08/02(月) 18:22:40
file = open('input.txt').read
file.gsub!(/$/){'。'}
open('output.txt','wb'){|f| f.write(file)}


773 :デフォルトの名無しさん:2010/08/02(月) 18:43:25
>>769
標準入力と標準出力つかおうぜ。
プログラムはフィルターだ!
>>771
正規表現使うまでもない気がするぜ!
>>772
最悪のコードだぜ!

通はこれ↓どや!

$stdin.each_line do |line|
line[-1] = '。'
$stdout.puts line
end

774 :デフォルトの名無しさん:2010/08/02(月) 18:46:50
while line = gets
line[-1] = '。'
puts line
end

これでもええで!

775 :デフォルトの名無しさん:2010/08/02(月) 19:30:37
data = open("input.txt").map{|line| line.chomp + "。"}.join("\n")
open("output.txt", "w").write(data)

776 :デフォルトの名無しさん:2010/08/02(月) 19:59:41
ストリームにmapぶちかます人って…

777 :デフォルトの名無しさん:2010/08/02(月) 22:42:17
File(IO)ってEnumerable includeしてるから、map行けるのかよw

778 :デフォルトの名無しさん:2010/08/03(火) 06:28:26
メモリがあふれなければどうということはない!

779 :デフォルトの名無しさん:2010/08/03(火) 15:05:12
>>775
それ、openしたファイルオブジェクトをcloseしてないよ

780 :デフォルトの名無しさん:2010/08/03(火) 15:10:09
二行スクリプトでそんなこと気にしてどうする。

781 :デフォルトの名無しさん:2010/08/03(火) 15:14:16
初心者スレ故、ご配慮頂きたい。

782 :デフォルトの名無しさん:2010/08/03(火) 15:15:02
ガベコレ任せじゃダメかもしれん資源というものを、
初心者のうちから気にするのはいいことだ。

783 :デフォルトの名無しさん:2010/08/03(火) 17:53:24
>>780
ブロックを使わないファイルのopenはRubyでは「ありえない」

今のところ>>772のみが妥当域

784 :デフォルトの名無しさん:2010/08/03(火) 17:59:40
>>783
file = open('input.txt').read
これも閉じてないから妥当じゃないし。


785 :デフォルトの名無しさん:2010/08/03(火) 18:01:46
どう「ありえない」のか言ってみたらいいよ

どこかのスレであつものに懲りてなますを吹くって言ってたけど
まさにこれだな

786 :デフォルトの名無しさん:2010/08/03(火) 18:19:12
file = open('input.txt').read.close

787 :デフォルトの名無しさん:2010/08/03(火) 18:22:43
>>786
もちついて

788 :デフォルトの名無しさん:2010/08/03(火) 22:02:13
Rubyの本を読んでいると、本によって括弧の省略規則が違って、自分はどうすれば
いいのか迷います。
とりあえず、引数がないときや、puts、attr_accessor等の組み込み系は省略すれば
よいのはわかったのですが。

みなさんはどうしているのでしょうか?

789 :デフォルトの名無しさん:2010/08/03(火) 22:10:43
>>786
これでできたら便利だよな

790 :デフォルトの名無しさん:2010/08/03(火) 22:31:52
>>789
File.read('in.txt')

Ruby1.9.1からはWindowsからも rb で使える

791 :デフォルトの名無しさん:2010/08/03(火) 22:35:38
>>788
メソッドチェーンを(後々)繋げる可能性がある場合はカッコをつける

obj.mes(arg).chain のつもりで obj.mes arg.chain と書いてしまうのはわりと悲劇

792 :デフォルトの名無しさん:2010/08/04(水) 00:56:46
>>788
http://labs.nayutaya.jp/?ruby-coding-standards
これと同じにしてる。

793 :デフォルトの名無しさん:2010/08/04(水) 04:49:01
>shebangを記述する場合、#!とパスの間には半角スペース1個を挿入する。

これとか

>ファイルは必ず改行文字で終了する。

これってなゆたやのオリジナルじゃなくて一般的なん?

#!とパスの間にスペース入ってないのとか
ファイルの最後の改行がないのとか
普通にいっぱい見かけるけど


794 :デフォルトの名無しさん:2010/08/04(水) 04:51:50
>obj.mes(arg).chain のつもりで obj.mes arg.chain と書いてしまう
ne-yo

795 :デフォルトの名無しさん:2010/08/04(水) 06:35:08
shebangにそのスペースが必要な場合がある、という説を、
(具体的に必要なシステムはわからない)別の人も、どこかで聞いたことが
あると言っていたので、どこかにソースがある、らしい。

最後の行に行末の改行がないとおかしくなるプログラムもあるので、
最後の改行は必ず付けるようにしたほうが無難。

796 :デフォルトの名無しさん:2010/08/04(水) 06:43:54
>>793
http://homepages.cwi.nl/~aeb/std/hashexclam.html#toc1.4

797 :デフォルトの名無しさん:2010/08/04(水) 07:00:46
>>795-796
d

無難ってことには同意だけど
どっちの例でもそのソフトの方が悪いと思うなぁ

798 :デフォルトの名無しさん:2010/08/04(水) 07:06:38
横からすまんが
#! /usr/bin/env ruby -Ku
っていうのはいかんの?

799 :デフォルトの名無しさん:2010/08/04(水) 07:07:27
shebangはソフトというよりexecシステムコールの挙動にまつわる都市伝説のようなものだし、
行末のほうはBNFで

<行> := <本体> "\n"

と定義してある場合に不都合だ、ということで、最後の行の場合だけ特別扱いしなきゃならなくなる。
「そのソフトの方が悪い」とか、意味わかんない。

800 :デフォルトの名無しさん:2010/08/04(水) 07:09:14
>都市伝説のようなもの

えっ?

801 :デフォルトの名無しさん:2010/08/04(水) 07:11:53
>>798
-Kuが無視されたり、"ruby -Ku"がenvの引数になるシステムがあったりする。
http://www.in-ulm.de/~mascheck/various/shebang/

802 :デフォルトの名無しさん:2010/08/04(水) 07:13:14
> えっ?

スペースが必要かどうか、ということについての話。
http://www.in-ulm.de/~mascheck/various/shebang/#blankrequired

803 :デフォルトの名無しさん:2010/08/04(水) 10:42:31
戻値があるか、一行で書けるブロックは {} を使って
それ以外は do end のルールに合わせてたけど、
>>792を見ると、
ブロックは {} で統一する、とあるな。
こっちに合わせた方がいいのかなあ

804 :デフォルトの名無しさん:2010/08/04(水) 19:35:22
自分は{}で書けるところは極力{}を書くようにしてる。
* タイプ数が増えるじゃないか。
* メソッドチェーンが超違和感あり。↓とか。
array.map do |e|
e.foo
end.bar.baz

* 1行は読み難いじゃないか。↓なにこれw
array.map do |e| e.foo; end
* 1行←→複数行への変更をするときいちいち{}←→doendに書き換えるの?ねーよw

237 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)