トップページ⇒tech
1001コメント311KB

Ruby初學者スレッド Part 9

■ このスレッドは過去ログ倉庫に格納されています
0001紅寶石2006/11/21(火) 08:33:42
まずはマニュアル

マニュアル
http://www.ruby-lang.org/ja/man/
Ruby FAQ
http://ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
逆引きRuby
http://www.namaraii.com/rubytips/
Ruby リファレンスマニュアルの Windows HTML Help版
http://elbereth-hp.hp.infoseek.co.jp/ruby.html
Rubyリファレンスマニュアル刷新計画
http://doc.loveruby.net/


前スレ
Ruby初心者スレッドPart8
http://pc8.2ch.net/test/read.cgi/tech/1159424939/

>>2-10
0455デフォルトの名無しさん2006/12/16(土) 18:06:40
eclipseのrubyプラグいんつーのもあるね。
eclipseの使い方知らないから使ってないけど。
0456デフォルトの名無しさん2006/12/16(土) 18:12:59
>>454
自分はRDE使ってるけど、使用し続けると、数時間後にリソースエラーとか何とかで固まるのと
保存後にアンドゥーができないのは確かに辛いよね。
HDDにファイルごと履歴残してないんだろうか。
0457デフォルトの名無しさん2006/12/16(土) 18:46:53
自動リファクタリングできるやつない?
0458デフォルトの名無しさん2006/12/16(土) 18:56:42
hoge.map{ |i| result += i }
をもっと短く書きたいのですが、
inject?

>>457
なさそう・・・
0459デフォルトの名無しさん2006/12/16(土) 18:57:23
あ、
hoge.inject{ |i, j| i + j }
か。
0460デフォルトの名無しさん2006/12/16(土) 19:23:16
RDEはツールバーの位置をちゃんと保存してくれれば
使いたいんだけどなー。

そんな漏れはJmEditor。TeraPad以外でシンプルないい
エディタないかな?
0461デフォルトの名無しさん2006/12/16(土) 23:48:51
俺はずっとサクラエディタだが
文字列や正規表現のリテラルに結構困る
それが無ければなー

PeggyPad は文字間の調節が出来なくて
太字の単語が潰れる…
0462デフォルトの名無しさん2006/12/17(日) 00:48:34
>>461
自分も、PHPとかPerlとか他のスクリプトは
全部サクラエディタ使ってる。
単語の補完も出来るし、登録しとけば
パラメータヒントとかも出せるからそれなりに便利だし。
0463デフォルトの名無しさん2006/12/17(日) 12:12:58
初歩的な質問なんですが
ファイルのコピーってどうすればいいんでしょうか
テキスト系なら↓でコピーできるんですが、画像ファイルは途中で途切れてしまいます

def copy(inf,ouf)
  dat = File.open(inf , "r") {|fr| dat = fr.read }
  File.open(ouf , "w" ) {|fw| fw.write dat }
end
0464デフォルトの名無しさん2006/12/17(日) 12:25:10
バイナリモードでオープンすればいい。

def copy(inf,ouf)
  File.open(ouf , "wb") {|fw| fw.write File.open(inf , "rb"){|fr| fr.read } }
end


でも、File.copy(from, to) 使っても同じようなことができるよね。
0465デフォルトの名無しさん2006/12/17(日) 13:15:17
ありがとうございました。
バイナリモードで無事成功しました。

今までFile.copy(from, to)がなぜかエラーだったんで自作してたんですが
さっきrequire 'ftools'が必要な事に気づきました。
0466デフォルトの名無しさん2006/12/17(日) 15:39:38
fileutilsつかえyo。
0467デフォルトの名無しさん2006/12/17(日) 18:14:18
FileUtils.copy_file(from, to)
0468デフォルトの名無しさん2006/12/17(日) 22:18:43
軽いエディタならnotepad++とかどうかな?
0469デフォルトの名無しさん2006/12/18(月) 10:52:12
* Rubyは最強の言語(のひとつ)である
* Rubyユーザは少数派である
* 大衆はRubyを(いろんな理由で)受け入れられない
* 現在、Rubyを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)
0470デフォルトの名無しさん2006/12/18(月) 12:00:24
プログラムのひとつもかけないようなやつの戯れ言を聞かされるのはたまったもんじゃないねw
0471デフォルトの名無しさん2006/12/18(月) 12:17:35
>>470
あなたのレスはRubyコミュニティーをみごとに象徴したすばらしいレスです。
0472デフォルトの名無しさん2006/12/18(月) 12:24:22
換言
プログラムを書いたことのない初心者はお断り。
0473デフォルトの名無しさん2006/12/18(月) 12:26:50
べーつにー、ただ書いたこともないくせに偉そうなこというやつはお断り。
偉そうなんだよねえ。
0474デフォルトの名無しさん2006/12/18(月) 12:28:19
どんだけエスパーなんだよ
0475デフォルトの名無しさん2006/12/18(月) 12:30:15
へ。「偉そう」って評したのがエスパーなの?
なんで?
0476デフォルトの名無しさん2006/12/18(月) 12:32:56
キチガイ来た
0477デフォルトの名無しさん2006/12/18(月) 12:45:55
まぁプログラミングの勉強をもうちょっと頑張ろうよとw
0478デフォルトの名無しさん2006/12/18(月) 12:46:55
* 現在、Rubyを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)
0479デフォルトの名無しさん2006/12/18(月) 12:49:24
今は開発陣がRuby使ってないのが問題だから
0480デフォルトの名無しさん2006/12/18(月) 12:49:25
確かに初めてのプログラミングでRubyをやるっていうのは
向いていないような気がする。
むしろRubyには、プログラミングの概念くらいは理解しているな?的な
良くも悪くもUnix思想を受けているんじゃないかな。
0481デフォルトの名無しさん2006/12/18(月) 12:57:38
換言
Windowsしか使ったことのない初心者はお断り。
0482デフォルトの名無しさん2006/12/18(月) 13:05:00
perl++
0483デフォルトの名無しさん2006/12/18(月) 13:30:41
* プログラマは(コンピュータを使う場合は)最強の職業(のひとつ)である
* プログラマは少数派である
* 大衆はプログラミングを(いろんな理由で)受け入れられない
* 現在、プログラミングを受け入れられるのは「選ばれた人々」である
* つまり、彼らはある意味「選民」である
* しかし、選民意識をあまり吹かせると、ますます大衆から受け入れられない
* 結果としてますます選民になる(悪循環の予想)

スレ違いゴメス。
0484デフォルトの名無しさん2006/12/18(月) 14:55:03
本スレ荒れたからこっちに住み着いたのに…。
勘弁してもらえないだろうか
0485デフォルトの名無しさん2006/12/18(月) 15:16:59
サクラエディタ使いだったが色々使ってみた。
JmEditor は良さ気だな。乗り換えようか。
Notepad++ は色分けの自由度が低いし
何より改行とタブの記号が自己主張しすぎてて嫌だw
0486デフォルトの名無しさん2006/12/18(月) 15:30:28
>>484
御大自ら次々にネタを投下してる言語なんだから仕方ないだろ。
修行だ、信仰心が問われているんだと思って我慢しろ。
0487デフォルトの名無しさん2006/12/18(月) 16:56:58
Jm使ってると書いた香具師だけど、俺はNotepad++にしようと
思ってる。ランチャー機能付いてるし、設定も簡単でイイ!

勘違いかもしれないけど、改行マークは最初から色ついてなかった
ような。とりあえずタブ記号は、スタイル設定ダイアログのGloba Styles
->Indent guidelinestyleで両方の色をデフォルトの背景色にすれば
消えるよ。

Notepad++教えてくれた人アリガトン。
0488デフォルトの名無しさん2006/12/18(月) 17:07:48
そんじゃあ、SciTE はどう?
04894872006/12/18(月) 17:21:17
Notepad++のタブ記号表示の設定方法は間違いだったスマソ。

改行とタブの表示の有無は表示メニューから切り替えるだけでOK。
04904852006/12/18(月) 17:50:57
>487
違う違う。
俺は改行記号とタブ記号は表示されないと嫌なの。
でも、あくまで主役はコードであって欲しいから
目立つ改行・タブの記号は嫌なのさ。
極限まで薄い色にしたら一応見れた。…今度は見辛いが。

…これ設定ムズいな〜。
黒基調の設定がデフォで入ってるPeggyは楽だったんだが。

SciTEは…暇なときに設定やるかw
0491デフォルトの名無しさん2006/12/18(月) 19:10:09
>>490
> >487
> 違う違う。
> 俺は改行記号とタブ記号は表示されないと嫌なの。

失礼。そうだったのか。

> でも、あくまで主役はコードであって欲しいから
> 目立つ改行・タブの記号は嫌なのさ。

改行は特にすごいね(笑)

> 黒基調の設定がデフォで入ってるPeggyは楽だったんだが。

自分も黒バックが好みなのでその意味ではめんどいかな。

ちなみにJmでいまいち気に入らなかったのは、関連づけなどから
起動したときにタスクバーアイコンがアクティブにならないとこ。
0492デフォルトの名無しさん2006/12/18(月) 20:35:17
PSPadはどう?
0493デフォルトの名無しさん2006/12/18(月) 21:16:49
なぜemacsを使わない
0494デフォルトの名無しさん2006/12/18(月) 21:22:05
初心者スレだから
0495デフォルトの名無しさん2006/12/18(月) 22:33:55
xyzzyの事も忘れないでください。
ruby-modeも黒基調もあるよ。
0496デフォルトの名無しさん2006/12/18(月) 22:41:04
>>495
xyzzyのruby-mode最低限の機能でよいのだが、
インデントが一定規則で、誤爆する
0497デフォルトの名無しさん2006/12/18(月) 22:49:57
初心者だからemacsを使わない。それで世の中が渡っていけると思ってるのか!
0498デフォルトの名無しさん2006/12/18(月) 22:50:35
渡っている人は大勢います。
私はEmacs使っていますけどね。
0499デフォルトの名無しさん2006/12/18(月) 22:53:50
xyzzyのruby-modeはインデント奇妙だよね
0500デフォルトの名無しさん2006/12/18(月) 22:57:33
インデントについてごちゃごちゃ言うならPythonへ行けよ。
0501デフォルトの名無しさん2006/12/19(火) 00:44:28
vivivivivi―――――――!!!!
0502デフォルトの名無しさん2006/12/19(火) 10:09:23
当り前だろ。何のためにendがあると思ってるんだ?
0503デフォルトの名無しさん2006/12/19(火) 13:25:53
ruby1.8.0と標準添付のwebrickを使って
ttp://rubyist.g.hatena.ne.jp/muscovyduck/20061114/p1
に書いてあるCGI実行サンプルを動かしてみると、常に「dump error」が出ます。
(ruby最新版を使うとエラーは出ませんでした)
webrick/httpservlet/cgi_runner.rb の Marshal.restore(dump) 周りに
問題があるようなのですが……

これって何故なんでしょうか?
1.8.0ではwebrickを使わないほうが良いのでしょうか?
0504デフォルトの名無しさん2006/12/19(火) 14:12:53
1.8.0を使わない方がいい、という結論の方をお勧めする。
0505デフォルトの名無しさん2006/12/19(火) 15:23:03
ばかにしてる!
0506デフォルトの名無しさん2006/12/19(火) 16:57:37
Rubyで
オブジェクト(Classクラスのオブジェクトも、クラスのオブジェクトも含めて)
が持ってるのは、
インスタンス変数と、インスタンスメソッドだけだと思ってたけど、
次の見て、ローカル変数も保持してるのって、わけわかめになってきた。

class Hoge
local = 1
define_method(:foo) do
p local += 1
end
define_method(:bar) do
p local += 1
end
local = 10
end
hoge = Hoge.new
p hoge.foo
p hoge.bar
(つづく)
05075062006/12/19(火) 17:01:04
(つづき)

どうやら、ローカル変数のスコープの問題が関与しているようだけど、
ローカル変数は、静的にスコープが決まるとかいって、U゚Д゚U ハァ?
って感じだったので、
静的ってのを調べたら、静的って言うのは、コンパイル時に決まるらしく、
今まで、コンパイルと実行を区別してなかった、私にとっては、
理解を超越してしまってる。
↓ここが、それに関する説明っぽいけど、
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4
スコープなんて言葉は一言もでてこないし、
ブロックって言う言葉も、普通の{}のブロックとは違うようだし、
意味不明です。

この理解は、RHGとか読んで、ソースコード読んで理解しなさいということなんでしょうか。
正直、初心者の私には、付いていけません。
eval系メソッドを使うなってことなんでしょうか。。


1.コンパイル=>実行までの流れがわかる、
2.あと、オブジェクトがどういう値を保持していて、どこからアクセス可能か
ということについて、いい本とか、サイトないでしょうか。

教えてください。お願いします
0508デフォルトの名無しさん2006/12/19(火) 17:25:45
>>507
>↓ここが、それに関する説明っぽいけど、
ここのことかな?
http://www.ruby-lang.org/ja/man/?cmd=view;name=%BC%C2%B9%D4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4

正直、このページ全体が酷い出来だな。
むしろこっちを読むべきじゃないかな。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%CA%D1%BF%F4%A4%C8%C4%EA%BF%F4#a.a5.ed.a1.bc.a5.ab.a5.eb.ca.d1.bf.f4

これでわからなかったら、また聞いてくれ。
0509デフォルトの名無しさん2006/12/19(火) 19:41:38
たしかにxyzzyのruby-modeはあんまりいけてないな。なんとかしてほしい。
>>500
xyzzyのruby-modeにおけるインデントがおかしいといってるだけであって、
ruby自体は何も非難していない。
被害妄想乙。
0510デフォルトの名無しさん2006/12/19(火) 20:09:49
>>509
じゃあスレ違いだ。xyzzyのスレに行ってやれ。
0511デフォルトの名無しさん2006/12/19(火) 23:14:41
>>506-507
まずクロージャ(closure)について勉強しろ。
理解できるまでは無理してdefine_method使うな。
0512デフォルトの名無しさん2006/12/20(水) 10:39:42
すみません。説明を放棄して使う奴の実力が足りないんだってことにしておきます。
0513デフォルトの名無しさん2006/12/20(水) 11:21:47
学習に必要なキーワードを提示してる人間を何故煽る
closureについてわからない所があれば、そこでまた質問すればいいんだ
そんなにスレを荒らそうとしないでくれ
0514デフォルトの名無しさん2006/12/20(水) 11:22:49
うぜ
0515デフォルトの名無しさん2006/12/20(水) 11:43:40
君たちが回答者という立場を満喫するべく質問を欲しそうにしていたから
質問をしてあげたんだ。
君たちは謝辞を述べてから、競い合うように簡潔にして丁寧な解説を
披露しあうべきではないのかね?
0516デフォルトの名無しさん2006/12/20(水) 12:20:38
簡潔で分かりやすい解説は、その人自身の習熟度の指標でもある。
0517デフォルトの名無しさん2006/12/20(水) 15:45:21
簡潔でわかりやすい質問は、その人自身の成長性の指標でもある。
うまく質問ができない人は、必要な回答を得られないので、成長性が低くなる。

よい回答が習熟殿の指標足りうるのは、よい質問があってこそ。
テストの問題と一緒だな。
0518デフォルトの名無しさん2006/12/20(水) 15:56:07
>>517
> うまく質問ができない人は、必要な回答を得られないので、
回答できない言い訳はどうでもいい。
ただ良い回答があればそれでいい。
0519デフォルトの名無しさん2006/12/20(水) 16:10:32
勉強になります!
0520デフォルトの名無しさん2006/12/20(水) 16:18:54
エスパーできる人は、そのことについて熟知している証拠である。
0521デフォルトの名無しさん2006/12/20(水) 16:54:41
ぼくも520さんみたいなエスパーに早くなれるよう
修行とお布施、がんばります!!
0522デフォルトの名無しさん2006/12/20(水) 23:01:50
>>509
xyzzyなら、ruby-mode.lを直接改造して、*ruby-block-beg-re*とかを改造するといいよ。
;(defvar *ruby-block-beg-re*
; "class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do")
(setq *ruby-block-beg-re*
"¥¥<¥¥(class¥¥|module¥¥|def¥¥|if¥¥|unless¥¥|case¥¥|while¥¥|until¥¥|for¥¥|begin¥¥|do¥¥)¥¥>")
とか。ちょっとはましになる。
0523506,5072006/12/20(水) 23:12:33

>>512は私ではありません。
気をわるくしないでください
2chにつながりにくくなって、返事がおそくなりました。m(__)m
お騒がせしてすみませんでした。

みなさん、ありがとうございます。
まずは、クロージャについて勉強しようと思います。

ちょっと、ネットで調べたところ、
自分が知りたい概念と同じような気がします。
0524デフォルトの名無しさん2006/12/21(木) 00:06:43
mswin32だとスレッドが使えないと聞いたのですが

Thread.fork {
while true
puts 'forked thread'
end
}
while true
puts 'main thread'
end

このコードは正しく動いている気がします
いつの間にか使えるようになったのでしょうか?
0525デフォルトの名無しさん2006/12/21(木) 00:31:04
fork違い
0526デフォルトの名無しさん2006/12/21(木) 01:04:48
forkがないってのと、console I/Oすると他のThreadも止まるってのを、
ごっちゃにしてるんじゃなかろうか。
0527デフォルトの名無しさん2006/12/21(木) 01:45:33
うん。ユーザースレッドだからmswin32だろうがスレッドは使えるよね。
0528デフォルトの名無しさん2006/12/21(木) 02:06:38
結局何が使えないんですか?
0529デフォルトの名無しさん2006/12/21(木) 06:31:22
Matz
0530デフォルトの名無しさん2006/12/21(木) 07:16:14
いるいるこういうやつ(笑)
0531デフォルトの名無しさん2006/12/21(木) 07:21:02
(笑)
0532デフォルトの名無しさん2006/12/21(木) 07:29:32
ユーザースレッドってのは、コルーチン?みたいなのかな?
OSのネイティブスレッドではない?

>>529-531
ワロタ。
でも本スレの流れを持ち込むのはやめてくれw
0533デフォルトの名無しさん2006/12/21(木) 07:33:52
>>532
そう、OSのネイティブスレッドではありません。
インタプリタががんばって処理します。
長所は移植性がとても高いこと。
短所はOSの支援を受けられないので、
たとえばSMPの恩恵を受けられないことです。
0534デフォルトの名無しさん2006/12/21(木) 20:02:20
リファレンス眺めてて気づいたのですが
while hoge..fuga
 foo
end
この記法、どういうときに使うのでしょう?
0535デフォルトの名無しさん2006/12/21(木) 21:02:05
>>534
while foo in hoge..fuga
  p foo
end

の間違いじゃ?
それだと無限ループしちゃうyo
0536デフォルトの名無しさん2006/12/21(木) 21:03:20
ごめん間違えた

for foo in hoge..fuga
  p foo
end

0537デフォルトの名無しさん2006/12/21(木) 22:15:42
ドットに複数の意味をもたせた言語デザインが悪い

とか逆切れしてみるのはどうか
0538デフォルトの名無しさん2006/12/21(木) 23:21:37
>>535
if (a==b)..(c == d)
end
みたいなのもあるんだよ。
ただ、可読性が結構低いのでお勧めは出来ないけど。

while hoge..fugaの形では使ったことはないけど
array.each do |e|
 next unless (e == hoge)..(e == fuga)
 ......
end
みたいな形では極稀に使う。
0539デフォルトの名無しさん2006/12/22(金) 10:43:54
ばっかみたい。
0540デフォルトの名無しさん2006/12/22(金) 12:05:15
define_methodとかinstance_evalだとかについて
使い方、使い所などについて懇切丁寧に解説してる
本とかってないですかねえ。
0541デフォルトの名無しさん2006/12/22(金) 13:08:50
わかる奴には説明する必要がなくて、わからない奴は使う必要がない、
というメソッドだからなあ。
なんかあるかねえ。
0542デフォルトの名無しさん2006/12/22(金) 15:48:04
使い方はマニュアル見ればいいけど、
使いどころを説明するのは難しいね。
リフレクションあたりから説き起こして
小冊子一冊分くらいの分量は優にあるテーマだと思う。
0543デフォルトの名無しさん2006/12/22(金) 20:31:24
すみません。お知恵を貸してください。

<状況>
実装がよく分からないクラスObjのインスタンスがあり、Obj#loadで
データを読んでくれます。Obj#loadが受け付ける引数はそのデータを
格納したファイルのファイル名のみです。

<やりたいこと>
手持ちの文字列データを突っ込みたいのですが、新たにファイルを
作ったりできません。

<試してみたこと>
StringIOを使ってみたりしました(NG)。

よろしくお願いします・・・。


0544デフォルトの名無しさん2006/12/22(金) 21:29:55
>>543
まずはソース嫁なんだけど。一応こんな感じでメソッド追加したら?

class Obj
  def load_str(str)
    # 何とかしてObjのインスタンス変数にアクセスする
  end
end

あとは、irbなんかでObjのインスタンス変数やらメソッドやらを調べまくればokだと思う。

0545デフォルトの名無しさん2006/12/22(金) 22:31:28
なんで新たにファイルが作れないんだろう。
Tempfile.new とかでもダメなのかな。
0546デフォルトの名無しさん2006/12/22(金) 22:59:14
loadで型をチェックしてるのかね。
IO.pipeを使って、書き込み側に手持ち文字列を突っ込んで、
読み出し側をloadの引数にすると出来たりしないだろうか。
0547デフォルトの名無しさん2006/12/22(金) 23:05:31
型チェックというか、
> Obj#loadが受け付ける引数はそのデータを
> 格納したファイルのファイル名のみです。
って書いてるから、Obj#loadの中でFile#openとか呼んでるだけなんジャマイカ?
で、File.openの引数にはTempfileとかIO.pipeの読み出し側って渡せる?
05485432006/12/22(金) 23:07:37
wxRubyを使ったGUIアプリをExerbで固めようとしているんですが、
GUIの設定部分をXRC(XML)ファイルとして外に出しており、何とか
これも含めて1つのexeにしたかったのです。

で、Exerbの方は外部データファイルをStringIOオブジェクトとしてしか
取得できないみたいで、一方、wxRubyはXRCをファイルとしてしか
読みません(たぶん)。

まあXRCだけexeとは別に添付ということでもいいんですけど。
こういうときにTempfile.newというのは慣例的あるいは審美的に
アリなんでしょうか?
05495432006/12/22(金) 23:14:58
すいません。レスがかぶってしまいました。
実装がよく分からないというのも、wxRuby(2)だからなんです。
拡張モジュールで、しかもSwigで作ってるらしいので、
ソースを見てもちょっと手に負えない可能性大です。

IO.pipeを調べて、一度それでやってみます。
0550デフォルトの名無しさん2006/12/23(土) 00:12:30
>>538
> if (a==b)..(c == d)
これ?ってどういう挙動すんの?

true..false
true..true
とか、って・・・
うげ、頭てんぱってきた
05515432006/12/23(土) 00:20:36
IO.pipeの読み出し側を渡すというのは上手くいきませんでした。
Tempfileを作って渡す方は上手くいきました。

もともと存在するファイルのコピーを作るというのにちょっと
違和感があったのですが、ともあれ、ありがとうございました。
0552デフォルトの名無しさん2006/12/23(土) 00:39:29
>>550
本スレにあったけど

404 Blog Not Found:{perl,ruby} -nle 'print if /start/../end/'
http://blog.livedoor.jp/dankogai/archives/50720796.html
0553デフォルトの名無しさん2006/12/23(土) 00:39:48
>>550
Rangeオブジェクトじゃなくて、範囲式の特殊な用法。

http://www.ruby-lang.org/ja/man/?cmd=view;name=%B1%E9%BB%BB%BB%D2%BC%B0#a.c8.cf.b0.cf.bc.b0
05545462006/12/23(土) 02:22:42
ファイル名しか渡せないってのをファイルしか渡せないと誤読してた。
混乱させて済まぬ。
■ このスレッドは過去ログ倉庫に格納されています