トップページ⇒tech
982コメント427KB

Ruby初心者質問スレPart1

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
オブジェクト指向スクリプト言語Rubyについての質問スレッドです。

雑談、ML・blogウオッチはこちらでどうぞ。
むーんうるふ Part13 【Rubyについて】
http://pc5.2ch.net/test/read.cgi/tech/1100533226/

Ruby Home Page
http://www.ruby-lang.org/ja/

前スレ - Rubyについて Part 12
http://pc5.2ch.net/test/read.cgi/tech/1100199861/
0153デフォルトの名無しさんNGNG
>>152
ですな。オブジェクトの状態を変えるのであれば、
そのオブジェクトが属するクラスにメソッドを定義するのが普通でしょう。
0154デフォルトの名無しさんNGNG
s = /hoge/
hogeの部分を変数で指定する事はできますか?
0155デフォルトの名無しさんNGNG
>>152
148じゃないけど、148と同じようなことを悩んでた。

>Ruby で引数に渡したオブジェクトを操作するって普通はやんない気がする。
わかりやすい。

>オブジェクトの状態を変えるのであれば、
>そのオブジェクトが属するクラスにメソッドを定義するのが普通でしょう。

なるほど。この言葉をチュートリアルにでものせて欲しい。
って、チュートリアルないからリファレンスか。
0156デフォルトの名無しさんNGNG
irb(main):001:0> s = 'hoge'
=> "hoge"
irb(main):002:0> /#{s}/
=> /hoge/
0157154NGNG
>>156
ありがとうございます!
勉強になりますた!
0158デフォルトの名無しさんNGNG
あーなるほど。
当然といえば、当然だなぁ。
俺、今まで Regexp.escape とか使ってた記憶が。
0159デフォルトの名無しさんNGNG
>151さん
http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-list/38183?38059-38391
のなかにある、38183(及び38206,38233など)からはじまるスレッドには、ruby
における変数とは何か、それをどのように説明するのが適切か、の熱いバトルが
交わされています。われわれ初心者、中級者にも参考になりますよ。
0160デフォルトの名無しさんNGNG
全然関係ない様な・・
0161デフォルトの名無しさんNGNG
Regexp::compile(s) より /#{s}/ の方が微妙に速いのね。そういうもん?
0162デフォルトの名無しさんNGNG
メソッド呼び出しの手間の分じゃない?
0163デフォルトの名無しさんNGNG
>160さん
そうですか?
>Rubyの場合は、他の言語でいう「値の入れ物」的な変数とは違い、すべてオブジ
>ェクトの参照になるみたいですね。。
まさに変数入れ物説と変数ラベル説の論争が、matzさんを交えて行われたのです
がね。無関係としか読めないようではまことに残念です。
0164デフォルトの名無しさんNGNG
Regexp.compile(s) と /#{s}/ は効果が違うからね
0165デフォルトの名無しさんNGNG
Rubyで書かれたnamazってないもんかな?
0166165NGNG
namazの中身を見て意味わからんかったから
Rubyで、書かれてたらどんなんなるのかと・・・
ちょっとした好奇心です。
0167デフォルトの名無しさんNGNG
なまぜっと?
0168デフォルトの名無しさんNGNG
>167
Parlやらで書かれた検索エンジンじゃね?
0169165NGNG
>167
すみません
namazuだ。
「u」が抜けてた
0170デフォルトの名無しさんNGNG
>165
んじゃそれで潜ってこい

http://www.geocities.co.jp/SiliconValley/1816/
0171165NGNG
orz
0172デフォルトの名無しさんNGNG
既存のプロジェクトをrubyで書き換えて
それがあまりに拡張しやすくてオリジナルを追い抜いてしまった
というようなプロジェクトってあるの?
0173デフォルトの名無しさんNGNG
既存のプロジェクトをrubyから書き換えて
それがあまりに動作が速く組み込みやすくてオリジナルを追い抜いてしまった
というようなプロジェクトなら知ってる
0174デフォルトの名無しさんNGNG
>>172
migemo は確か最初 perl で書かれてたな。
どういう経緯で ruby で書き換えられたのか知らないけど。
0175デフォルトの名無しさんNGNG
> 実は Migemo エンジンは以前はPerl で実装していたのだが、木構造のデータ
> を扱っているうちにプログラムがごちゃごちゃして修正が不可能になったため、
> あるとき Rubyで書き直すことにした。

横着プログラミング 第2回: Migemo: 日本語のインクリメンタル検索
ttp://namazu.org/~satoru/unimag/2/
0176デフォルトの名無しさんNGNG
>>173
もとはなにを!? VBか?
0177デフォルトの名無しさんNGNG
シリアルポート覗きたいんだけどどうやんの?
0178デフォルトの名無しさんNGNG
マシンの裏にまわれ。
0179デフォルトの名無しさんNGNG
test = 'abc\def'
print test #=> abc\def
p test #=> "abc\\def"

pで表示したときに、バックスラッシュが\\で表されているのに驚いたのですが
こういうものなのですか?
なんでこうなるんでしょうか?
0180デフォルトの名無しさんNGNG
p はデバグ用なんで、バックスラッシュとかダブルクォーテーションとかは
エスケープして表示される。
0181デフォルトの名無しさんNGNG
あ、なるほど。そういえば、pのStringの表示は""で囲われてますね。

Rubyの内部で、バックスラッシュが\\で扱われるってことではないんですね。
0182デフォルトの名無しさんNGNG
Windowsで使用できる、Ruby用のIDEは、
RDE以外に、どういうものがあるんでしょうか?
0183デフォルトの名無しさんNGNG
>>182
どぞー
(´・ω・`)つttp://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Tools+for+Ruby
0184182NGNG
>>183
レスありがとうございます。
沢山あったんですね。

皆さんはどれをお使いなのでしょうか?
0185デフォルトの名無しさんNGNG
へー、C-M-f/C-M-b なんてのがあったんだ。
……漏れもトリ頭ですた orz
0186デフォルトの名無しさんNGNG
シリアルポート覗きたいんだけどどうやんの?
0187デフォルトの名無しさんNGNG
マシンの裏にまわれ。
0188デフォルトの名無しさんNGNG
countの数だけスペースを挿入したいんですが、
もっとスマートな方法があれば教えて頂けませんか?

count = 5
(1..count).each{ print(" ") }
print("hoge\n")
0189デフォルトの名無しさんNGNG
" "*5
0190デフォルトの名無しさんNGNG
print(" " * count)
print("hoge\n")

Stringに数を掛けると繰り返し。
0191デフォルトの名無しさんNGNG
凄いぜRuby最強
0192188NGNG
>>189 >>190
おおっ、そんな方法があったとは!素晴らしい。
ご教示をありがとうございました。
0193デフォルトの名無しさんNGNG
>>188
ちなみに、 count 回繰り返す、は Range#each より count.times { ... } がよさげ。
0194188NGNG
>>193
なるほど!そういうメソッドもあるんですね。
練習がてら、下の様なファイル列挙コードを作っていたのですが
もっと洗練されたコードに出来ますでしょうか?

def enum_files(path, layer = 0)
  Dir.foreach(path){|f|
    if f != "." && f != ".."
print(" " * layer)
      
if File.directory?(path + "/" + f)
print("[dir] ", f, "\n")
  enum_files(path + "/" + f, layer + 1)
else
      print("[file] ", f, "\n")
end
  end
  }
end

enum_files("c:/")
0195デフォルトの名無しさんNGNG
>>194

まぁいいんじゃないか

メソッド名や変数名がちょっとこなれてない感じするけど

漏れは
enum_files -> puts_files
layer -> level

にしたほうが好みだ
0196188NGNG
>>195
とりあえず、問題なさそうなのでよかったです。
puts_files もいいですね。
確かにlayerよりlevelですね。

それにしてもRubyのプログラミングは楽しいですね。
噛めば噛むほど味が出てくるという感じで。
最初Perlを覚えようとしていたんですが、Rubyやって正解でした。
0197デフォルトの名無しさんNGNG
言語に正解はない。全部やれ。
0198デフォルトの名無しさんNGNG
シリアルポート覗きたいんだけどどうやんの?
0199デフォルトの名無しさんNGNG
>>198
お前いい加減にしろよ。
ネタなら寒すぎるし、ネタじゃないなら何故レス無いかよく考えろ。
0200デフォルトの名無しさんNGNG
>>198はもう寝た
0201デフォルトの名無しさんNGNG
だったらパラレルポート覗きたいんだが?
0202デフォルトの名無しさんNGNG
>201
それ以前にまだパラレルポートって載ってたっけ?
漏れの自宅マシンはもうそろそろ古株なのでシリアルもパラレルもまだあるが……
0203デフォルトの名無しさんNGNG
pdfかpostscriptで配布されているrubyのチュートリアルか入門が
どこかweb上にあるでしょうか。日本語でなければ英語でもよいです。
0204デフォルトの名無しさんNGNG
>>199
rubyじゃできないのね。
了解です。
0205デフォルトの名無しさんNGNG
>>201
/dev/port

>>203
http://www.summa.jp/tutorial/index.html
0206デフォルトの名無しさんNGNG
>203
英語が苦にならなければ
http://www.rubycentral.com/book/
がおすすめです。(邦訳あり)
最初の数章は良い入門書になります。
また、
Built-in Classes and Methods
という章は秀逸なリファレンスです。
chm形式のファイルがダウンロードができたんだが、場所を失念した。
ご存知の方、help.
まあ、2版を手に入れたほうが良いかもしれないが、
入門としてはこれで十分だし、良書であることは間違いない。
0207203NGNG
>>205, 206
どうもありがとうございました。
0208デフォルトの名無しさんNGNG
>>206
chmはProgramming Ruby--onlineにある。そこの リンクスから辿れる。
0209デフォルトの名無しさんNGNG
>208
Thanks. Good job.
0210デフォルトの名無しさんNGNG
Rubyの環境が無いWindowsユーザーに作ったプログラムを渡したいのですがコンパイルとかできませんか?
0211ねた?NGNG
>>210
Exerb
http://exerb.sourceforge.jp/
0212デフォルトの名無しさんNGNG
>>211
ありがとう
Microsoft .NET Framework 1.0が必要らしいのでいまだうんどーろしてます
ごめんねはじめてるびーしたからごめんね
0213デフォルトの名無しさんNGNG
>>212
Microsoft .NET Framework 1.1じゃなくて?
0214デフォルトの名無しさんNGNG
ごめんね
0215デフォルトの名無しさんNGNG
>>210
Apolloを使うという手もあるぞ
あっちなら.NETFrameworkも必要ないはずだし
0216デフォルトの名無しさんNGNG
Programming Ruby, 2nd Ed の邦訳が検討されてたりはしないでしょうか?
0217デフォルトの名無しさんNGNG
>>215
phi.so(Apolloの実体)込みでexerbでexeは作れるけど、
Apollo使うってことは結局Rubyをインストールするのと
同じなのであんまり意味無いと思う。

0218デフォルトの名無しさんNGNG
シンボルについて質問です。
ハッシュのキーにシンボルを使うと実行効率で有利ってのは
納得できるんですが、attr_readerとかにシンボルを渡すのは
実行効率からなの? だいたい1回しか実行されないだろうし、
文字列でもそんな変わんないんじゃないかと思うのですが…。
0219デフォルトの名無しさんNGNG
attr_reader って文字列を渡せるんだ。
初めて知った。
0220デフォルトの名無しさんNGNG
そう言われてみれば大差ないかもね。< attr_reader
個人的には、慣れてるし他人のスクリプト見ても Symbol 使ってることが多いから、
Symbol を使い続けるだろうけど。

むしろハッシュのキーにシンボルを利用するのは
相当差が出るケースくらいで、普通に文字列使ってるなあ。
0221デフォルトの名無しさんNGNG
>>217
あれ? Apollo で書かれたスクリプトを exerb で固めて使うとき
Apollo のインストールって必要だったっけ?

>>218
「メソッド名には Symbol を使う」という原則を、どこかで聞いた希ガス。
理由はよく分からない。正直、どっち使っても良いと思う。
0222デフォルトの名無しさんNGNG
>>221
Smalltalk のセレクタ(メソッド名)の実体はシンボルで、メソッド本体
(メソッドオブジェクト)へのアクセスや、その動的起動時のキーにシンボル
を使ったりもするけど、それとは関係あるのかな?
0223デフォルトの名無しさんNGNG
WinXP + ActiveScriptRubyで現在練習しているのですが
Rubyでのバイナリ入出力の仕方が判りません。。
Cでいうところの、下の様な出力がしたいのですが。

------- C -------
FILE *fp = fopen("data", "wb");
int i = 128;
fwrite(&i, 1, sizeof(i), fp);
fclose(fp);

一応Rubyで下の様なコードを試してみたのですが
テキストに変換されて保存されてしまいます。
----- Ruby ------
n = 128
f = File.open("test.txt", "wb")
f.write(n)
f.close()
0224デフォルトの名無しさんNGNG
面倒なので、よく見ずにとりあえず pack/unpack と言ってみる。
0225223NGNG
>>224
なるほど、pack/unpack というのがあるんですね。
構造体とかもこれでイケそうですね。
どうもありがとうございました。
0226デフォルトの名無しさんNGNG
>>221
いらないが、固めるときにちょっと面倒。
phi.soとphi.rbを一緒に詰め込んであげないといけないとか。

>>223
RubyのIO#writeはto_sされた結果が出力される。
Cのコードを見る限り128というコードを持った文字が出力されるのと同義なので、
File.open("test.txt", "wb") { |f| f.write(128.chr) }
でいいんじゃないだろうか。
というか中途半端だけどリファレンス見ろ。
0227デフォルトの名無しさんNGNG
るびきちさんに彼女ができるなんて・・・なんかショックだ
http://members.lycos.co.uk/bakashin2/maripe0054.gif
http://members.lycos.co.uk/bakashin2/maripe0055.gif
http://members.lycos.co.uk/bakashin2/maripe0056.gif
0228デフォルトの名無しさんNGNG
……なして誰もIO#binmodeのこどしゃべね?
0229デフォルトの名無しさんNGNG
>>228
Wi(ry
0230デフォルトの名無しさんNGNG
WinXPでCygwin版のRubyを使用しています.
入力したキーを記録するプログラムを
作成したのですが,なぜか大文字のA,D,Bだけが
入力できません(キーを押しても何も表示されません).
Shiftを押さずに押すと,普通に小文字のa,d,bが
打てますので,機械的な問題ではありません.
他の大文字は入力することができます.

なんででしょう???
0231デフォルトの名無しさんNGNG
>>230
コードを見せれ。
0232デフォルトの名無しさんNGNG
rubyのJavaDocのようなドキュメント記述について参考になるサイトない?
ぐぐってみたけどいまいちよくわからん
分かりやすいサンプルがあるとうれしい
こーかくとこういうhtmlができるとか
0233デフォルトの名無しさんNGNG
流れとは関係なく、ドキュメントはソースに埋め込むのではなく
テストコードに埋め込む方がいいと主張してみる。

テスト==仕様みたいなもんだし、動的にメソッド定義する場合は
ソースのどこにドキュメント書いていいかわからないし。
0234デフォルトの名無しさんNGNG
そこでテストをソースに埋め込むんですよ。
0235デフォルトの名無しさんNGNG
>>234
matzがそれやってるって自白してたね。
0236デフォルトの名無しさんNGNG
ネタはあっちでやれよ。

>>232
http://www2.pos.to/~tosh/ruby/rdtool/ja/whats.html
http://www.rubyist.net/~rubikitch/RDP.cgi?cmd=view;name=RD
0237デフォルトの名無しさんNGNG
http://para-site.net/up/data/759.jpg
C言語で作ったものを移植してみましたつもりでしたが動きません。
どこがおかしいのでしょうか?
0238デフォルトの名無しさんNGNG
total が 1500 より小さい時は get_total が値を返さない(if の end が
return の後にあるから)とか、入力してくださいというわりに gets とかじゃ
なくて ARGV から取ってるとかいうあたりがちょっと変なあたりかな。

また、 ARGV は文字列なので(gets等で読み取ったデータも文字列)、
get_total に渡す時は to_i しないといけないんじゃないか。
0239デフォルトの名無しさんNGNG
mata omae ka
0240デフォルトの名無しさんNGNG
>>238
ありがとうございます。
さっそく修正にかかります。
>>239
すいません。阿呆で。
0241デフォルトの名無しさんNGNG
どっちかというと、RDよりRDocだろう。
というわけで、ほれ
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=RDoc%B3%D0%A4%A8%BD%F1%A4%AD
0242sageNGNG
StringIOって何? Stringとどうちがうの?
0243デフォルトの名無しさんNGNG
>>236
こういう閉鎖的な奴がいるからrubyって普及しねぇんだろうなぁとおもた。
0244デフォルトの名無しさんNGNG
>>242
全然違う。
StringIOは文字列にIO風のメソッドを追加してIOっぽく使えるようにしたもの。
うまく使うととても便利。
0245デフォルトの名無しさんNGNG
C++でいうところのstringstreamのようなもんだ。
0246デフォルトの名無しさんNGNG
JavaでいうところのByteArrayOutputStreamみたいなものだ。
0247デフォルトの名無しさんNGNG
PerlでいうところのTie::Scalar或いはPerlIO::scalarといえばわかるだろうか。
0248デフォルトの名無しさんNGNG
どっかにサンプルコード集みたいなのは無いんですか?
0249デフォルトの名無しさんNGNG
>>248
「Ruby レシピブック 268の技」とか?
0250デフォルトの名無しさんNGNG
>>248
そういうのは普通コミュニティがコードを持ち寄ってサイトを作るものなんだけど
あいにくRubyコミュニティは普通じゃないので。
0251デフォルトの名無しさんNGNG
>>248
「逆引きRuby」とかは?
ttp://www.namaraii.com/rubytips/

0252デフォルトの名無しさんNGNG
http://f26.aaa.livedoor.jp/~xxms/RGSS_XRXS_BP11.htm
待機以外の各行動は下一桁1→8を繰り返すというものなのですが。
1→8、でピタッと止めるようにしたいのですが。
どうすればよいのでしょうか_| ̄|○
■ このスレッドは過去ログ倉庫に格納されています