Ruby 初心者スレッド Part 32at TECH
Ruby 初心者スレッド Part 32 - 暇つぶし2ch1:デフォルトの名無しさん
09/10/24 06:18:12
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

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

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

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

2:デフォルトの名無しさん
09/10/24 06:19:04
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?

A:
プログラム作成自体の初心者なら
 ・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
  URLリンク(www.amazon.co.jp)
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
 ・「初めてのRuby」
  URLリンク(www.amazon.co.jp)

以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
 ・「Rubyレシピブック 第2版 268の技」(初心者向け)
  URLリンク(www.amazon.co.jp)
 ・「プログラミングRuby 第2版 言語編」(初心者向け)
  URLリンク(www.amazon.co.jp)
 ・「Ruby Way 第2版」(脱初心者向け)
  URLリンク(www.amazon.co.jp)
 ・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
  URLリンク(www.amazon.co.jp)

以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
 ・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
  URLリンク(www.amazon.co.jp)

3:デフォルトの名無しさん
09/10/24 06:20:08
Ruby 公式・非公式便利サイト2009

・Ruby Home Page 【公式、お役立ち度が微妙】
 URLリンク(www.ruby-lang.org)
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
 URLリンク(www.ruby-lang.org)
 URLリンク(www.ruby-doc.org) 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
 URLリンク(elbereth-hp.hp.infoseek.co.jp)
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
 URLリンク(www.ruby-doc.org)
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
 URLリンク(jp.rubyist.net)

・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
 URLリンク(www.namaraii.com)
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
 URLリンク(d.hatena.ne.jp)

・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
 URLリンク(www.rubyforge.org)
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
 URLリンク(github.com)

・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
 URLリンク(jp.rubyist.net)

4:デフォルトの名無しさん
09/10/24 06:21:53
関連スレ
・Rubyについて Part 37
 スレリンク(tech板)

アンチスレ
・Rubyについて(アンチ専用) Part004
 スレリンク(tech板)

Railsスレ
・【Ruby】Ruby on Rails Part8
 スレリンク(php板)

Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
 スレリンク(tech板)

Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
 スレリンク(tech板)


5:デフォルトの名無しさん
09/10/24 06:22:47
前スレ

Ruby 初心者スレッド Part 31
スレリンク(tech板)

Ruby 初心者スレッド Part 30
スレリンク(tech板)


6:デフォルトの名無しさん
09/10/24 07:04:48
バージョンに関するよくある質問

・Ruby 1.8.5
 レンタルサーバ等にいまだに残ってる非安定な古いバージョン
 1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい

・Ruby 1.8.6
 過去の長期政権と数の暴力で一大勢力圏を維持中の旧安定版
 公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ

・Ruby 1.8.7
 1.9 シリーズの機能をいくつか足したハイブリッドなバージョン、初学者にこそお勧め
 1.9 系機能は 1.8.6 では動かないが「えーマジ1.8.6!? 1.8.6が許されるのは小(AA略」と煽ってよい

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に

・Ruby 1.9.1
 満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中

7:デフォルトの名無しさん
09/10/24 07:07:22
おまけ

・Rubygem 0.x
 極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
 このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
 しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
 パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
 Rubygem は 1.0 も 1.1 も 1.2 も肝心なとこにバグ持ちなので極力 1.3 などの最新を使うこと

8:デフォルトの名無しさん
09/10/24 12:42:59
へえ~。理解した。おつ!

9:デフォルトの名無しさん
09/10/24 13:03:49
WindowsでRubyを始める人のために、前スレより転載


17 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/17(木) 18:28:30
>>14
最初はRubyistMagazineのページを見るといいかも。
URLリンク(jp.rubyist.net)
以下引用
> Windows Me, 2000, XP, Vista (95, 98, 98SE)
> -------------------------------------
> 以下のサイトから ActiveScriptRuby の最新版をダウンロードしてインストールしてください。一番上からダウンロード出来るものをインストールして下さい。
> Windows 98 以前の Windows をお使いのかたは、あらかじめ Windows Installer 1.1 以上を入手しておく必要があります。
> URLリンク(www.artonx.org)
> ActiveScript というものが何であるかを気にする必要はありません。


36 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/17(木) 19:07:18
RubyistMagazineのページに、チュートリアルが紹介してあんのな。

URLリンク(jp.rubyist.net)
> Ruby ではじめるプログラミング
>
> とりあえず何をしたらいいのかわからない、という人は本誌 Rubyist Magazine の初心者向け連載があります。
> URLリンク(jp.rubyist.net)
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。

10:デフォルトの名無しさん
09/10/24 13:05:21
あとこれも前スレから。


105 名前: デフォルトの名無しさん Mail: sage 投稿日: 2009/09/18(金) 16:25:12
初心者にカリカリしている人が多いようなので、再掲しました。

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

ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。

11:デフォルトの名無しさん
09/10/24 17:44:09
URLリンク(jp.rubyist.net)

とりあえず落ちていることを報告。

12:デフォルトの名無しさん
09/10/24 19:48:01
質問があります。

cucumberという受け入れテストツールを動かしてみているのですが、
コマンドプロンプト上だとwin32consoleをインストールすることで色づけがされるのですが、
UTF-8が化けてしまいます。
そこで、cygwinのターミナルck上で動かそうとしたのですが、今度は色づけがされません。
どういったことを疑うべきでしょうか?

cucumber 0.4.2
ruby 1.8.7
Windows Vista SP2

13:デフォルトの名無しさん
09/10/24 19:54:21
>>12
コマンドプロンプトというか CMD.EXE 上で UTF-8 文字が表示できないのは当たり前

cygwin のターミナルで着色されないのは環境変数 $TERM あたりが実際のターミナルと合ってないのだろう

14:デフォルトの名無しさん
09/10/24 20:55:11
cucumberがTERM=cygwinに対応してないんだろう

15:デフォルトの名無しさん
09/10/24 21:26:23
cygwin だからといって TERM が cygwin だとは限らない

16:デフォルトの名無しさん
09/10/24 22:19:07
ckはcygwinじゃなかったっけ?

17:デフォルトの名無しさん
09/10/24 23:17:48
いつになったら CMD.EXE 上で UTF-8 表示出来るようになるのかしら

18:デフォルトの名無しさん
09/10/24 23:20:14
だよな
それが解決したら文字コードまわりの問題の殆どが解決する稀瓦斯

19:デフォルトの名無しさん
09/10/24 23:20:55
ブロックパラメータの引数の数を調べる方法はありますか。
やりたいことは、ブロックの引数の数によって処理を変えることです。

def f()
n = ブロックの引数の数
if n <= 0
...
else
...
end
yield
end


20:デフォルトの名無しさん
09/10/24 23:31:08
なんか色々ツッコミ入れたいが、メソッドの不定数引数は *arg のように受け取る

def mes(*arg, &block)
if arg.size.zero? then
puts "no arg"
else
arg.each_with_index do |e, i|
puts "#{i}: #{e}"
end
end
yield if block
end


irb> mes('a', 'b')
0: a
1: b
irb> mes
no arg


21:デフォルトの名無しさん
09/10/25 00:14:09
>>19
def f
prc = Proc.new
n = prc.arity
p n
end
f{|a,b,c| } #=> 3

詳しくはマニュアルでProcを調べろ

22:デフォルトの名無しさん
09/10/25 00:39:05
mapやeachが現在何回目のループなのか知る手段ないですか?

23:デフォルトの名無しさん
09/10/25 00:41:42
>22
with_index

24:デフォルトの名無しさん
09/10/25 00:52:23
>>23
ぐぐってみたんですが使い方がわからないです
こうではないですよね・・

[1,2].map.with_index do |n,i|
puts i
end


25:デフォルトの名無しさん
09/10/25 00:56:25
ubuntu に ruby をインストールしてみました
端末から ruby と入力すると exitで$(bash)に戻れません

どうすれば$(bash)に戻れるのでしょうか?

Googleで調べてみたのですが
あまりに初歩すぎる疑問のようで
回答を見つけることが出来ませんでした

26:デフォルトの名無しさん
09/10/25 01:11:03
mapにwith_index っていうのは、標準にはなくて
自分で定義しろということでしょうか?

27:デフォルトの名無しさん
09/10/25 01:11:16
>>25
Control + D

恐らく、やりたいことに最も近いのは ruby でなく irb を使うこと
ruby はエディタで既に書いたコードを実行するために使うと覚えとこう

28:デフォルトの名無しさん
09/10/25 01:30:11
>>17
chcp 65001
できるだけって感じだけど

29:デフォルトの名無しさん
09/10/25 01:32:30
>>27
ほんとだ、$(bash)に戻ってこれた

けど、rubyの人達って Emacs Emacsって書いてありますけど
やっぱりEmacsなんでしょうか?

30:デフォルトの名無しさん
09/10/25 02:05:34
>>26
.with_index の使い方は>>24であってる。(0始まりに注意)
が、バージョンによってはそもそも存在しなかったり、require が必要
だったりするので、バージョンを明示せよ。


31:デフォルトの名無しさん
09/10/25 02:20:37
>>29
本気でプログラマ目指すとかならemacsとかviも触っておくに越したことはないけど
普通に勉強するならgedit辺りで良いと思うよ
gedit ファイル名 &
でコード書いて、セーブしたらターミナルに戻って
ruby ファイル名
で実行すれば良いんじゃないかな
ファイルに書き起こすまでもないようなコードはirbで直接書いて実行するのも良い

32:デフォルトの名無しさん
09/10/25 02:27:13
1.9系はeach.with_indexとmap.with_index
1.8.7はeach_with_indexもしくはto_enum.with_index.eachとto_enum.with_index.map
1.8.6だとeach_with_indexと・・・mapはわからん、enumerator.rb呼んでもダメそうだし

33:デフォルトの名無しさん
09/10/25 02:31:36
そういえば1.8.7のブロックなしmapは扱いが特殊だったな。


34:デフォルトの名無しさん
09/10/25 02:32:27
Æ
&aElig;

35:デフォルトの名無しさん
09/10/25 02:36:23
1.8.6でインデックス付きmapやるなら、インデックスだけ取ってきて
中身にはイテレータ使わずにループ書いたほうが楽そうだな

36:デフォルトの名無しさん
09/10/25 02:55:50
>>32
ありがとうございます
ヴァージョンは1.8.6です
each_with_indexの動作確認できました

37:デフォルトの名無しさん
09/10/25 03:16:32
RubyってPHPやPerlほどwebで使われてないと思うけどなんで。

38:デフォルトの名無しさん
09/10/25 03:38:03
Perlほど昔から使われてたわけじゃないし、
PHPみたいにWeb専用言語でもないからじゃないか?
使えるアプリもそれほど多くないと思うし

39:デフォルトの名無しさん
09/10/25 04:18:53
>>37
PHPやPerlで用が済むから

40:デフォルトの名無しさん
09/10/25 04:38:57
ていうか Ruby のバージョンによらず何事もなければ each_with_index が出るのが普通
これで間に合わない場合にのみほかの手段を講じる

41:デフォルトの名無しさん
09/10/25 07:38:33
>>32
1.8.6だと
require 'enumerator'
p %w(a b).enum_with_index.map{| v,i | [v,i] }
# => [["a", 0], ["b", 1]]

42:デフォルトの名無しさん
09/10/25 07:44:14
これってバグになりますか?

test = []
test[0] = "aa"
test[1] = "bb"
test[99] = "cc"


t = Array.new(3)
t[99]= 88

43:デフォルトの名無しさん
09/10/25 08:06:38
test = []
test[0] = "aa"
test[1] = "bb"
test[3] = "cc"
t = Array.new(3)
t[6]= 6
p test
p t

#=>
["aa", "bb", nil, "cc"] [nil, nil, nil, nil, nil, nil, 6]



44:デフォルトの名無しさん
09/10/25 08:12:43
動くのは知ってるんですが
仕様上、この構文が許されてるのかどうかを知りたいんです
特に、Array.newなんて関数が用意されてるのに
t = Array.new(3)
t[6]= 6
こんなことできるんじゃArray.newの立場はどこへ?

45:デフォルトの名無しさん
09/10/25 08:13:18
#!/usr/bin/ruby -Ku
print "Content-type: text/html\n\n"

begin

a=0
if a==0
#end

puts "OK"

rescue Exception => e
bt = e.backtrace
puts "#{bt.shift}: #{e.message} (#{e.class})<br />"
puts bt.map{|s| ">>from #{s}"}.join("<br />")
end

ブラウザで「Internal Server Error」が表示されます。
エラーを捕捉できないのでしょうか?

46:デフォルトの名無しさん
09/10/25 08:26:23
>>45
できるはずだけど、もし自分でできないならCGIExceptionをインストールしてみたら?
URLリンク(cgi-exception.rubyforge.org)

47:デフォルトの名無しさん
09/10/25 09:35:13
>>44
Array.new は関数ではない
揚げ足取りではなく本当に学習的な意味で、それを関数と捉えてはいけない

Array.new は Array クラスの インスタンス(オブジェクト)を生成する
Array オブジェクトの [] メソッドは内部領域にデータを追加する
そんだけ

48:デフォルトの名無しさん
09/10/25 09:38:59
インストールしてみましたが、シンタックスエラー?は表示されませんでした。
>>45もシンタックスエラー?以外は捕捉できます。

49:デフォルトの名無しさん
09/10/25 09:55:24
(eval内は別として)文法エラーは、「実行前」に検出されるもの。
検出する処理さえ実行される前だから、当然捕捉できない。


50:デフォルトの名無しさん
09/10/25 10:22:42
>>44
ある程度大きな配列で、サイズが事前にわかっているなら
動的にちまちまと拡張するよりは最初にサイズを予約したほうが効率的

なんだけど普通は気にしなくていい

51:デフォルトの名無しさん
09/10/25 10:32:17
ある程度大きな配列ったって1000や1万では話にならんけどな
なおかつインデックスで要素追加をすること前提

52:デフォルトの名無しさん
09/10/25 12:41:05
>>47
Array オブジェクトの []= メソッドはオブジェクトの内部領域にデータを追加する

だと思う

53:デフォルトの名無しさん
09/10/25 17:57:56
>>47
newは演算子でしたね
でもスクリプトの場合って
コンパイルするわけじゃないし演算子も関数も違いないような気がしますけど
構文的はOKなんですね
(ちょっと かいたスクリプトが途中で落ちてしまうのでバグの箇所を探しています・・)

>>50
なるほど、やっぱりその程度の使い方なんですね

54:デフォルトの名無しさん
09/10/25 18:26:28
>>53
Rubyだとnewは演算子でもなんでもなく、Classクラスから継承したインスタンスメソッド
URLリンク(doc.okkez.net)

55:デフォルトの名無しさん
09/10/25 18:37:40
関数だと考えるとわからなくなるというのは「クラス→インスタンス」モデルを考えれということなんだと思う
呼び名が用語的に間違っているから正しい呼び方をしろという意味ではない、たぶん

Array.new は Array クラスのインスタンス(オブジェクト)を返す
Array.new(引数つき) は Array オブジェクトを作成し、引数に応じた状態に変更してから返す
Arrayオブジェクト[インデックス]=値 は Arrayオブジェクトの []= メソッドに引数 (インデックス, 値) を渡し、
メソッドに規定された状態変更等を行ってから Array オブジェクトを返す
地の文の [] は Array.new を簡単に書けるようにわざわざ組み込まれたもので、Array.new と同じものを返す

56:デフォルトの名無しさん
09/10/25 18:41:06
インスタンスの状態なり情報を内部領域って言うのはなんか怖いな

57:デフォルトの名無しさん
09/10/25 18:42:44
クラスもまた、オブジェクト(Classクラスのインスタンス)で表される、ということが
JavaとかC++からの連想だとわからないよね。

58:デフォルトの名無しさん
09/10/25 18:58:58
>>56
C で書かれてる Array や Hash の場合は格納されたデータ本体を外部から触れないからなー
どこに格納されてると説明する?

59:デフォルトの名無しさん
09/10/25 19:07:46
>>58
まさにそういうCレベルで意識させることに「内部領域」という言葉の怖さを見てとったんだけど
それが目的なら仕方ないとしか

60:デフォルトの名無しさん
09/10/25 19:09:24
>>48
>インストールしてみましたが、シンタックスエラー?は表示されませんでした。

require 'cgi'
require 'cgi-exception'
eval <<'END_OF_SCRIPT'
 # ...
 # ここにコードを書く
 # ...
END_OF_SCRIPT

というふうにすれば、シンタックスエラーも表示されたりしないかな。

61:デフォルトの名無しさん
09/10/25 19:21:13
>>59
URI は、インスタンス変数に URI データを格納してるじゃん
Net::HTTP も、インスタンス変数にサーバからのデータを格納してるよな
でも Array とか String とか Hash とか Regexp とかは、インスタンス変数があるわけじゃないよな

62:デフォルトの名無しさん
09/10/25 19:24:24
>>53
Array.new自体の存在意義を問うてる?
並のユーザーから見たこいつの心髄は、第二引数によるデフォルト値の設定だと思う

> ary = Array.new(3, "hoge")
=> ["hoge", "hoge", "hoge"]
> ary[5]
=> nil
> ary[5] = "fuga"
=> "fuga"
> ary
=> ["hoge", "hoge", "hoge", nil, nil, "fuga"]

まあこれといいHash.newといい、迂闊に触ると火傷するけどね

> ary[0][1] = "a" # ary[0]の二文字目を上書き
> ary
=> ["hage", "hage", "hage", nil, nil, "fuga"]

>>60
スクリプト本体を別ファイルにしてloadなりrequireすれば
問題のスクリプトに触れる前にbeginブロックが実行されるから捕捉できる

begin
load "example.rb"
rescue Exception => e
bt = e.backtrace
puts "#{bt.shift}: #{e.message} (#{e.class})<br />"
puts bt.map{|s| ">>from #{s}"}.join("<br />")
end


63:デフォルトの名無しさん
09/10/25 19:25:11
あ、CGIだっけ?content-type吐き出すの忘れてた

64:デフォルトの名無しさん
09/10/25 19:25:52
>>61
Rubyのインスタンス変数は原則プライベートだから
インスタンスがどういう情報の持ち方をしていようが何の興味もないよ

65:デフォルトの名無しさん
09/10/25 19:51:01
>>45
もしApacheを使ってるなら
Apacheの設定次第で、エラーの内容をログファイルに出すこともできる
どうしても表示されないなら試してみるのもいいかも

66:45
09/10/25 21:37:48
スクリプト本体を別ファイルにしてloadすれば、
シンタックスエラーが表示されました。

今回はこの方法を使わせていただきたいと思います。
ありがとうございました。

67:デフォルトの名無しさん
09/10/25 21:40:23
一回 ruby -wc でシンタックスチェックしてみろよ

68:デフォルトの名無しさん
09/10/25 21:43:03
というか手元に Ruby 実行環境がないのだろ

69:デフォルトの名無しさん
09/10/25 22:56:40
twitterのbotを勉強目的で作ろうとしてるんだが、こんなエラーが発生して対応できない。
誰か解決策を教えてください。twitterのライブラリは入れてあるつもりなのですが。。

エラーメッセージは下です。
# ruby ./aaa.rb./aaa.rb:2:in `require': no such file to load -- twitter (LoadError)
from ./aaa.rb:2

環境はこうなっています。
# gem list
*** LOCAL GEMS ***
actionmailer (2.3.4)
actionpack (2.3.4)
activerecord (2.3.4)
activeresource (2.3.4)
activesupport (2.3.4)
crack (0.1.4)
hoe (2.3.3)
httparty (0.4.3)
json_pure (1.1.9)
mash (0.0.3)
oauth (0.3.6)
rack (1.0.1)
rails (2.3.4)
rake (0.8.7)
ruby-hmac (0.3.2)
rubyforge (2.0.3)
twitter (0.6.15)

70:デフォルトの名無しさん
09/10/25 22:59:13
gem なら require 'rubygems'


71:69
09/10/25 22:59:32
実行したいソースは↓です。

#require 'ruby gems'
require 'twitter'
require 'time'


USERNAME = 'bot'
PASSWORD = '!@#QWE'

client = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD ))
client.update( Time.now)

72:69
09/10/25 23:02:09
参考に観てたblogのソースだと空白が仕込まれてたみたいです。。
>>70さん ありがとございました。

73:デフォルトの名無しさん
09/10/25 23:14:53
require 'rubygems' は書くべきではない、という指摘もあったな。
1.9なら不要だし、1.8では、ない場合はどうせエラーにするだけだし、
あるならRUBYOPTにセットしとけ、みたいな感じ。


74:デフォルトの名無しさん
09/10/25 23:24:43
>>73
君は使いもしないライブラリを読み込むべきだと考えるのかね

75:デフォルトの名無しさん
09/10/25 23:30:38
RUBYOPT は自分のために自分の環境で設定するもの
他人に強制したり期待したりするものではない

76:デフォルトの名無しさん
09/10/25 23:43:48
RUBYOPT構想は結局失敗だったな

77:デフォルトの名無しさん
09/10/25 23:47:28
そもそも環境変数自体が失敗

78:デフォルトの名無しさん
09/10/25 23:57:39
使いもしないライブラリとやらが組み込まれてやんのw

79:デフォルトの名無しさん
09/10/25 23:58:47
うるせぇエビフライぶつけんぞ

80:デフォルトの名無しさん
09/10/26 00:03:54
一度でも読み込んだライブラリは二度読み込まないようにすればいいのではないだろうか

81:デフォルトの名無しさん
09/10/26 00:53:10
>>80
それはそうなってるから。


82:デフォルトの名無しさん
09/10/26 02:34:52
Ruby-mswin32版の1.9.1をインストールしたら
gemが入ってたので、ssleay32.dllとzlib.dllをbinフォルダにいれて
パスとおして
gem update --system
ってコマンド打ったら
Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.3.5
:0:Warning: Gem::SourceIndex#search support for String patterns is deprecated
Updating RubyGems to 1.3.5
Installing RubyGems 1.3.5
D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-update-1.3.5/lib
/rubygems/config_file.rb:39:in `new': wrong number of arguments (5 for 4) (Argum
entError)
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/config_file.rb:39:in `<class:ConfigFile>'
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/config_file.rb:12:in `<top (required)>'
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `require'
        from D:/ruby-1.9.1-p0-i386-mswin32/lib/ruby/gems/1.9.1/gems/rubygems-upd
ate-1.3.5/lib/rubygems/gem_runner.rb:8:in `<top (required)>'
        from setup.rb:25:in `require'
        from setup.rb:25:in `<main>'
ってかんじで怒られた、どっか間違ったか?

83:デフォルトの名無しさん
09/10/26 06:20:08
p0で失敗しても文句は言えんな

84:デフォルトの名無しさん
09/10/26 07:12:57
うひょう、ruby1.9.1-p0 と ruby1.9.1-p243 で Win32API の initialize の引数の数が違う

p0
 def initialize(dllname, func, import, export = "0")
p243
 def initialize(dllname, func, import, export = "0", *rest)

rubygems-update-1.3.5 の記述

  if RUBY_VERSION > '1.9' then
   SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP',
    'L', :stdcall
   SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path
  else
   SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'LLLLP',
    'L'
   SHGetFolderPath.call 0, CSIDL_COMMON_APPDATA, 0, 1, path

85:デフォルトの名無しさん
09/10/26 08:15:39
Ruby1.9.1 の Windows 用でそれをするとはいろいろな意味でチャレンジャーというか煽り屋というか

86:デフォルトの名無しさん
09/10/26 08:20:42
そんなんただのラブレターだろ
「いますぐRuby1.9.1の最新版パッチのWindowsバイナリを公開しろ、
さもなくば基幹的デファクトスタンダードライブラリのアップデート不能を以ってRubyの価値を減じる」
というラブコール

87:デフォルトの名無しさん
09/10/26 08:26:30
最新版のWindowsバイナリー! 早く来てくれー!

俺もコンパイルに成功すれば、Windowsバイナリ公開したいのに
make test-allがなかなか通らない……
メンテナの方々はどんな作業をやってるんだろう

88:デフォルトの名無しさん
09/10/26 08:33:12
URLリンク(rubyforge.org)
ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない

89:12
09/10/26 10:14:19
>>13-18
Thanks
rspecはちゃんとck(cygwin)でも色分けできるんですけどね・・・。

TERMはcygwinでした。export TERM=xtermとかにもしてみたけど駄目ですタ(この辺よく理解してないです)

>>17
ついでにPower Shellも入れてみたんですが、UTF-8対応して中田 orz
nkfでUTF-16にしても化けるし意味わからんちん

90:デフォルトの名無しさん
09/10/26 12:49:19
とりあえず ruby が糞だということは良く伝わりました
本当にありがとうございました

91:デフォルトの名無しさん
09/10/26 12:57:45
ラブレターなら直接相手に言わないと伝わらないんじゃないか

92:デフォルトの名無しさん
09/10/26 13:07:20
>>91
リア充は帰れ

ラブレターってのは
「○○って△△さんのこと好きなんだって」
「えーうそー△△ちゃん可哀想~」
みたいに周りからじっくり攻めていくのが正しい姿

93:デフォルトの名無しさん
09/10/26 13:10:00
明らかに周りからも祝福されてねーじゃねーか

94:デフォルトの名無しさん
09/10/26 13:24:46
なにごとも一度でうまくいくことはそうそうないよ
突然話を振るよりも事前のネゴとコネと日頃のコミュニケーションが大事

95:デフォルトの名無しさん
09/10/26 13:33:47
>>92
> 「えーうそー△△ちゃん可哀想~」
やめろ

96:デフォルトの名無しさん
09/10/26 14:57:09
クソワラタwww

97:デフォルトの名無しさん
09/10/27 04:59:52
ruby1.8.7をcheckinstallでRPMパッケージを作成してインストールしたのですが、
ri -cコマンドを打っても標準ライブラリのクラスが表示されません。(Railsのクラスのみ表示される)
ri GCと打ってもNothing known about GCと出力されるのです。
これはrubyのriドキュメントがインストールされてないということでしょうか?
RPMパッケージでインストールせずにconfigureでオプション付けたりしないといけないのかな。

98:デフォルトの名無しさん
09/10/27 05:51:33
>>97
checkinstallはよくわからないけど、自前でコンパイルするときは
./configure
make
sudo make install
sudo make install-doc # ドキュメントのインストール
が必要だった気がする

99:デフォルトの名無しさん
09/10/27 05:59:15
質問です。Mershall使ってインスタンスの状態を保存しているのですが
一度インスタンスをnewしてdumpした後、その後オブジェクトを変更して
追加されたor削除されたクラス変数を検知して初期化したいです
どのようにしたらいいでしょうか 以下のようなソースです

class DataObj
attr_accessor :cnt
def initizalize
@cnt=0
end
end

class SaveData
attr_accessor :data
def initialize(file_name)
load(file_name)
end
 def load(file_name)
if File.exist?(file_name)
@data = File.open(file_name, "rb"){|f| Marshal.load(f) }
else
@data= DataObj.new()
end
end
def save
File.open("test.dat", "wb"){|f| Marshal.dump(@data, f) }
end
end


100:デフォルトの名無しさん
09/10/27 06:35:07
よーわからんが、Marshalはオブジェクト全体の復元しかできない
復元してからオブジェクトが同一かどうかチェックするしかないな

101:デフォルトの名無しさん
09/10/27 06:52:34
>>100
そうですね、Marshalだとかそういうライブラリは、この際あまり関係なかったですね
保存時のオブジェクトが復元時のインスタンスのオブジェクトと違う場合を許容したい場合は
どのような処理をすればいいでしょうか、ということみたいです
クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

イメージとしては クラス変数にし対して obj.each{|i| i=0 if !i.exist? }
という配列処理っぽいことがやりたいです (もちろん配列じゃないのでこの操作は不適ですが)

102:デフォルトの名無しさん
09/10/27 07:22:48
クラス変数は @@ で始まる
@ で始まるのはインスタンス変数
初期化の意味がわからない

特定の条件の場合にオブジェクトを同一とみなして欲しいというときは
適宜 == メソッドを再定義して new == old を行う

class C
def initialize(params=nil); @params=params; end
def ==(other)
self.instance_variables.all? do |e|
self.instance_variable_get(e) == other.instance_variable_get(e)
end
end
end

c1 = C.new('a')
c2 = C.new('b')
p c1 == c2 #=> false

c3 = C.new('a')
p c1 == c3 #=> true ('a' == 'a' が true なので)

default = C.new
c4 = C.new
[c1, c2, c3, c4].each do |c|
if c == default then puts 'default!' else puts 'modified' end
end
# => modified, modified, modified, default!


103:デフォルトの名無しさん
09/10/27 07:29:36
>>101
>クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

よーわからんけど、オブジェクトにバージョン番号をつける方法じゃだめかな。
バージョン番号が違っていれば初期化、とか。

104:デフォルトの名無しさん
09/10/27 07:29:49
===

105:デフォルトの名無しさん
09/10/27 07:43:32
質問です。
1. プラットフォームがwindowsかどうかを判定する方法は、どうするのがいちばんいいでしょうか。
RUBY_PLATFORM をチェックするのが王道だと思いますが、そのチェックの仕方で悩んでいます。

2. windowではバイナリファイルの読み書きにはFile.open(file, 'rb')のように'b'をつけないといけませんが、
これはcygwinでも同じでしょうか。
('b'が必要なプラットフォームが何かを知ろうとしています)


106:デフォルトの名無しさん
09/10/27 07:58:24
fopenの仕様を読みましょう

107:デフォルトの名無しさん
09/10/27 08:04:18
皆さんありがとうございます
・・・恥ずかしながらインスタンス変数とクラス変数を勘違いしていました
>>103氏のいうようなバージョン管理でやろうとすると

class DataObj
attr_accessor :ver,:a,:b,:c
def initialize(obj) #
@ver=0
@a,@b,@c=0,1,2
end
end

class DataObj_1 < DataObj
attr_accessor :d,:e,:f # 変数を追加
def initialize(obj)
super
@ver=1
@a,@b,@c=obj.a,obj.b,obj.c
@d,@e,@f=3,4,5
end
end

current_version=1
a=load("save.dat")
a=Data_Obj_1 if a.ver == current_version # あるいは a === DataObj_1 かな?

ということでやりたいことは、できそうです スマートな方法とは言い難いですが・・・

108:デフォルトの名無しさん
09/10/27 08:08:23
すいません、最後は a.ver が 0 のとき
if a.ver < current_version の間違いですね

109:デフォルトの名無しさん
09/10/27 09:13:30
>>105
1. は URLリンク(jp.rubyist.net)


110:デフォルトの名無しさん
09/10/27 09:32:33
>>109
その記事にある「Win32API.soがrequireできるかどうか」は、
1.9だと全部ダメとか、1.8でもWINE環境でrequireできちゃう
とかあるので注意。

2の方は、いわゆるDOSISHなプラットフォームが該当する。
具体的にはcygwin以外のWindows、DOS(djgpp)、
x68000(human68k)、OS/2(emx)

111:デフォルトの名無しさん
09/10/27 09:37:09
自動で判断するぶんには RUBY_VERSION =~ /mswin|mingw/ でいいんじゃね
クラス変数とかに結果入れておいてユーザーが変更可能にしておくとかすれば喜ばれそう

112:デフォルトの名無しさん
09/10/27 09:52:38
バイナリ扱う時に環境判断せずに「とりあえずbつけとけ」ではだめなんだっけ?

113:デフォルトの名無しさん
09/10/27 09:55:16
ミリ秒の差が数千万円になるようなエッジな環境では命取り

114:デフォルトの名無しさん
09/10/27 09:55:44
>>112
それが望ましいっす。

115:デフォルトの名無しさん
09/10/27 10:32:51
>>107
Marshalで保存したオブジェクトは自分のクラスを記録してるから
別のクラスのインスタンスとして復元する事は出来ない
Hashを中間データとして使う方法をすすめる
ついでにmarshal_dumpとmarshal_loadについて調べておくといい

116:デフォルトの名無しさん
09/10/27 10:39:58
>>102で用が済むと思うのだが

117:デフォルトの名無しさん
09/10/27 11:09:13
質問します。
ディレクトリ内にあるhtmlファイルの読み込みで、Data/a/1.htmlを読み込ませたあと
Data/b/1.html→Data/c/1.html・・・とずらずらとディレクトリ違いの同じ名前のhtmlファイルを
読み込ませるにはどうしたらいいですか?

118:デフォルトの名無しさん
09/10/27 11:12:47
それに必要なのはなんだと思う?
というようなとこから考えて欲しいと思った

とりあえずいちばん簡単なの

dirs = ['a', 'b', 'c', 'd', 'e', 'f', ...]

dirs.each do |dir|
File.open("#{Data/#{dir}}/1.html"){|f| f.read}
end

119:デフォルトの名無しさん
09/10/27 11:13:36
>>117
Dir.glob("Data/*/1.html") do |file| ... end


120:117
09/10/27 11:24:16
即レスどうもです!
とても参考になります!
ちょっくら試してみます。
ありがとうございました!

121:デフォルトの名無しさん
09/10/27 22:59:08
しつもーん!
どこからも参照されなくなったオブジェクトは GC によって破棄されるだよね?

loop { /正規表現オブジェクト/ }

この場合 /正規表現オブジェクト/ はループのたびに生成されるの?

122:中田
09/10/27 22:59:18
>>89
Power ShellのUTF-8対応なんてしらん


123:デフォルトの名無しさん
09/10/27 23:04:27
>>121
いいえ、固定の正規表現リテラルはパース時にチェックされ、スクリプト内で1回だけ生成され保持参照されます

ただし、変数を #{ } などで含んでいる場合は毎回変数を参照して新規作成される
最初の1回だけにしたい場合は //o と o オプションをつける
この理屈で言うと、/re/ がたくさんあるとメモリ食う

124:デフォルトの名無しさん
09/10/27 23:19:19
>>123
なるほど、ありがとうございました。

125:デフォルトの名無しさん
09/10/27 23:23:51
>>12
cygwin1.5系や素のcmd.exeは未だにCP932だから、UTF-8はそのままだと表示できません。
考えられる方法はだいたい以下の通り。
(1)素のcmd.exeにて、nkfでCP932に変換して表示
(2)cmd.exe にて chcp 65001 によって UTF-8 モードにして UTF-8 を表示 (挙動妖しい)
(3)cygwin 1.5 にて、nkf で CP932 に変換して表示
(4)cygwin 1.7 (デフォルト UTF-8) にて UTF-8 で表示 (開発途上)

まぁ、どれもろくでもないんで、cucumberだったらHTMLにでも書き出して、
ブラウザで見た方がいいんじゃないですかね。

126:デフォルトの名無しさん
09/10/27 23:31:54
そーいえば、PowerShellはシェルとしてはcmd.exeとしては同レベルです。
コネがある方がいらっしゃいましたら、ちゃんとUnicode通るようになんとかしてやってください

127:デフォルトの名無しさん
09/10/28 00:05:56
WriteConsoleWでがんばってください

128:デフォルトの名無しさん
09/10/28 09:30:42
"123.6"をdecimalの123.6に変換するメソッド(例えばto_iのようなもの)はないでしょうか?

129:デフォルトの名無しさん
09/10/28 09:39:40
decimalではなくてfloatでした。すいません。

130:デフォルトの名無しさん
09/10/28 09:56:03
>>128
マニュアル嫁
文字列だから String のマニュアルを読む
URLリンク(www.ruby-lang.org)

131:12
09/10/28 09:59:20
ロックマンが海外で『Mega Man』の名称に変更された理由とは… - Game*Spark
URLリンク(gs.inside-games.jp)



1993年に発行されたGame Playersマガジンのカプコン副社長Joseph Morici氏のインタビューによると、
当時日本で作られたロックマンのローカライズを検討していたMorici氏は、“Rockman”というタイトル名が単純に気に入らなかったそうです。

  ”あのタイトルは酷すぎました。そこでMega Manという名前を思いついたんです。
  するとそのアイデアは気に入られて北米版で使われることになりました。ゲーム内容は日本版と全く同じでしたけどね。”



パッケージ画像
URLリンク(gs.inside-games.jp)

 ___
/ ||Mega|| ∧_∧
|.....||Man || (     )  どうしてこんなことに…
| ̄ ̄\三⊂/ ̄ ̄ ̄/
|    | ( ./     /

132:12
09/10/28 10:00:08
誤爆

133:12
09/10/28 12:03:40
変なもん誤爆しちゃった…

>>12 の件ですが、結論から言いますと、
--color を引数に明示的に指定することで解決しました。

コマンドプロンプトでは色づけされる、んならすでに指定してたんじゃないんかい!と言われそうなのですが、
実際には指定しておらず、
.featureファイルに以下の記述をして「i18nで日本語を使う」とcucumberに知らせていた場合にだけ、
何故かコマンドプロンプトのみ色付けされるようでした。
# language: ja

--colorの指定は、ルートディレクトリにcucumber.ymlファイルを置いて、

default: features -f pretty --color -l ja

のように記述することで、デフォルトの引数を指定できました。

とりあえず、解決ということでありがとうございました。

134:12
09/10/28 12:04:50
連投スマソ

>>125
ありがとうございます。

もっとロクでもない方法(?)として、以前はRUBY_PLATFORMがwin32でTERMがnilのときだけ、
$stdout.writeでSJISにnkfで変換する方法も使ってました。
Railsスレあたりに投下した覚えがあるので検索すればでてくるかも。

cygwinはUTF-8化用のDLLを入れてあり、ターミナルソフトのck.exeでUTF-8を表示できるのですが、
cygwin上でwin32のautotest使うと、テストが再実行しようとCtrl+Cを押すと何故かされず、即終了してしまうんですよね。

最近は、coLinuxのUbuntuを入れて、かなり普通にあたりまえに動くしUTF-8も問題ないので、それでもいいか、という気がしています…。

135:デフォルトの名無しさん
09/10/28 12:19:05
cygwinのttyはWindowsのコンソールとは見なされないからね。
それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。

136:デフォルトの名無しさん
09/10/28 15:05:18
拡張モジュールの中で struct FRAME や struct RNode を触りたいんですけど、ruby.hには含まれていなくて困っています。
今はnode.cから extern strct RNode { ... }; を自分のソースにコピーしていますが、
もっといい方法があると思うので、ぜひ教えてください。


137:デフォルトの名無しさん
09/10/28 15:42:49
rbbrのツリーってタブおしたら落ちない?再現率100%なんだけど

138:デフォルトの名無しさん
09/10/28 16:56:22
>>136
node.cって何?

1.8ならenv.h、node.hが普通にあるはず。
1.9なら方法はないので諦めてください。

139:デフォルトの名無しさん
09/10/28 19:18:40
拡張ライブラリのソースを ext/foo/foo.c に置いたら、extconf.rb も同じ場所に置かないといけない?
それともextやREADMEと同じ場所においておくもの?

140:デフォルトの名無しさん
09/10/28 19:21:51
gem なら Rakefile に gem.extensions = 'ext/extconf.rb' とか直接書く

141:デフォルトの名無しさん
09/10/28 20:42:02
>>139
基本的には同じところに置かないといけない。
別のところにも置くことはできるけど、それを聞いてくるということは、説明してもしかたなさそう。

142:デフォルトの名無しさん
09/10/28 22:54:07
>>136
何のために?
99%方針が間違ってる。

143:デフォルトの名無しさん
09/10/29 17:06:54
htmlファイルの読み込みについてなんですが、
マッチングでマッチした文字列以降を表示させるにはどうすればいいですか?

144:デフォルトの名無しさん
09/10/29 17:13:22
HTML あんま関係ないな

簡単なのは「キーとなる文字列の直後から必要な別のキーの直前まで」をマッチさせること
$1 とか $2 とかの正規表現の勉強をするといい

# <title></title>で囲まれた文字列
/<title.+?>(.+?)<\/title>/i =~ html
puts $1

145:デフォルトの名無しさん
09/10/29 17:14:47
>>143
コードを書いて実行すればいいよ

146:143
09/10/29 17:26:50
>>144-145
あざっす!!

147:デフォルトの名無しさん
09/10/29 18:17:28
フォームから入力されたユーザー名とパスワードで
Kerberos認証をしたいのですが何か方法はありますでしょうか?
(ApacheのBasic認証にKerberosを利用するのではなく、
Rubyで作成したCGIの任意の箇所で認証処理をしたいです。)

ライブラリ等あればいいのですが…。
Kerberos認証を行うシェルを作成して、
CGIからユーザー名とパスワードを渡して実行させるしかないですかね?

148:デフォルトの名無しさん
09/10/29 20:26:46
>>143
$'

149:デフォルトの名無しさん
09/10/29 21:34:35
>>147
使ったことないけど、URLリンク(rubyforge.org) とかかな。


150:デフォルトの名無しさん
09/10/30 10:12:29
質問
Time#to_i の秒数って、時差というかタイムゾーンとかどうなってますか?

151:デフォルトの名無しさん
09/10/30 11:07:10
そのオブジェクトが地方時か協定世界時かにかかわりなく、
to_iが返すのはUnixタイム。

152:デフォルトの名無しさん
09/10/30 11:11:15
あのへんは UTC とはなんぞやということを外部で習ってるということ前提だからな
Ruby で初めて意識したという人にとってはやや不親切だ

153:デフォルトの名無しさん
09/10/30 11:19:13
to_i で整数にして計算して at で戻すと一瞬わけわからんことに

154:デフォルトの名無しさん
09/10/31 04:36:09
教祖がデビアン住人だしな。世界の外の事は知らない。

155:デフォルトの名無しさん
09/10/31 07:35:31
>>154
どういう意味?


156:デフォルトの名無しさん
09/10/31 10:27:39
教祖とか宗教とかモルモンとかそういう単語の入ったレスは読み飛ばしてOK
NGにしておいても一向に損をしないことを保証する

157:デフォルトの名無しさん
09/10/31 16:53:54
Pentium4(HT)のWindowsXP環境で
CPUを100%使い切って計算しようとおもったら、マルチスレッド対応にしないとだめかな?
タスクマネージャーみたら、なんかCPUに余力が有るみたいなんだが・・・

158:デフォルトの名無しさん
09/10/31 17:05:46
複数プロセス同時に動かすのは?

159:デフォルトの名無しさん
09/11/01 21:12:16
>>157
HTは、1コアを2コアに見せかける技術だから、1コアをもし使いきっているなら、
タスクマネージャでどう表示されようが、100パーセント使い切ることになるように思うけど、どうだろう。
ファイルやネットワークの入出力がある場合は100パーセントになりにくいけど、
非同期I/Oを使って頑張れば100になるんじゃないかなー。

最近のCPUは2コアが普通だから、158のように複数プロセス起動しないとだめだろうね。

160:デフォルトの名無しさん
09/11/01 23:49:32
そんなことまで考えてプログラミングしてるのか
すごいなお前ら

161:デフォルトの名無しさん
09/11/02 00:06:26
"begin a,b,a,a,b end"
のような、中身が繰り返しているような文字列のマッチはどんなふうにするのがいいでしょうか?
/begin ((a|b),)*(a|b) end/
とすればできましたが、2回同じこと(a|b)を書いているのがちょっと気になります
あと、できれば繰り返しの部分を$1,$2,$3・・・のようにあとで取得したいのですが、可能でしょうか?



162:デフォルトの名無しさん
09/11/02 04:12:38
>>161
>2回同じこと(a|b)を書いているのがちょっと気になります
正規表現なら我慢して書くしかないように思う。

>繰り返しの部分を$1,$2,$3・・・のようにあとで取得したい
マッチする個数がわからないと難しい。
/begin ((a|b)(,(a|b))*) end/
として、
$1.split(/,/)
とするぐらいか?

あと (a|b) は、もしほんとにaとbを使うだけなら[ab]のほうがいい。
/begin ([ab](,[ab])*) end/


163:デフォルトの名無しさん
09/11/02 08:00:11
ここはRubyスレなので、Rubyの正規表現なら、という話なら、
(?<名前>任意の表現) と
\g<名前> の組み合わせでできる。

/begin ((?foo<(a|b)>),)*\g<foo> end/

164:デフォルトの名無しさん
09/11/02 08:06:53
Rubyの正規表現と称して>>163がOniguruma実装限定の正規表現持ち出してきたのが笑える

165:デフォルトの名無しさん
09/11/02 08:23:44
begin ~ end だけ抽出しておいてそれに (a|b) の scan かけるんじゃだめなん

166:デフォルトの名無しさん
09/11/02 10:51:59
>>164
1.9ならOnigurumaが標準だろ

167:デフォルトの名無しさん
09/11/02 10:55:27
そんな寝言は1.8.7を撲滅してからほざくがよいぞ
それまでは両バージョン用併記か注釈で対応バージョン明記

168:デフォルトの名無しさん
09/11/02 10:58:37
スレとしては 1.8.7 が推奨バージョンなんだから、
1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな

169:デフォルトの名無しさん
09/11/02 11:04:48
普段く1.9の質問したら、氏ね、1.8使えと煽るくせに、
正規表現は1.9で書き込むとか、
ここの住人はダブルスタンダードだな、おい

170:デフォルトの名無しさん
09/11/02 11:24:05
1.9でレスしてもいいんだがそうと明記すべきだぬ

171:デフォルトの名無しさん
09/11/02 11:24:40
いつの話だよ
さすがに今1.9を使うなって奴はいないだろ

172:デフォルトの名無しさん
09/11/02 11:28:12
>>169
だって君の言う「ここの住人」って、一人しか居ないわけでもなければ、
まったく同じ考え方をする集団ってわけでもないもの。
ダブルスタンダード認定は、前者と後者が同じ人間によって書き込まれたことを
確認してからでないと。

173:デフォルトの名無しさん
09/11/02 11:32:48
初心者が使用すべきものと熟練者が使用して便利なものとは違うということをいまさら講釈しないといかんのか

174:デフォルトの名無しさん
09/11/02 16:05:25
1.9はsp2出るまで町だな。

175:デフォルトの名無しさん
09/11/02 16:27:06
1.9.3のこと?

176:デフォルトの名無しさん
09/11/02 17:33:30
2.0マダー

177:デフォルトの名無しさん
09/11/02 17:39:55
>>171
います

178:デフォルトの名無しさん
09/11/02 21:01:12
>>168
>1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな

だな。1.8.7からの新機能の場合もその旨書いておいてほしいよね。
今度から>>1に追加しといてもらおう。

>>171
>いつの話だよ
>さすがに今1.9を使うなって奴はいないだろ

おまえはまず>>1を声だして100回読め




179:デフォルトの名無しさん
09/11/02 21:27:12
>>158-159
繰り返しの計算処理なんだわ
具体的には、ニューラルネットの実装やってる
はんぱない回数の計算が学習には必要なんだけど
1プロセスだと、スレッド分けしても、複数CPUは使ってくれないってことかな?

だとすると、プロセス間通信とかを眼中にいれて設計しないとダメってことかな?
ってことは、向かうところはdRubyあたり?

180:デフォルトの名無しさん
09/11/03 01:06:18
ほう、膨大な計算量を必要とする分野にも進出してるんだなあ

181:デフォルトの名無しさん
09/11/03 03:07:06
>>180
実用とか研究とかじゃなくて趣味だけどね。
Rubyでやってもいいんじゃない?ってかんじで

182:デフォルトの名無しさん
09/11/03 06:53:38
Rubyの入門書では、サンプルプログラムの出力を大抵以下のように書いてます。
puts 'Hello World!'
ですがたまに以下のように書き方も見かけます。
$stdout.puts 'Hello World!'

どっちも正しいと思いますが行儀の良い書き方という意味では後者になるのですか?

183:デフォルトの名無しさん
09/11/03 07:07:13
意味不明。内部でやってることは同じだし後者には何のメリットも無い。

184:デフォルトの名無しさん
09/11/03 07:16:11
printf("Hello World\n");と
fprintf(stdout,"Hello World\n");の違いみたいなもんだぞ
簡略できるようにしてあるのにあえて冗長に書く必要はないと思う

185:デフォルトの名無しさん
09/11/03 07:48:49
冗長に書く意味があることはありうる

が、これに限ってはまず無いだろうな
前者の関数的メソッド puts の出力先を捻じ曲げるためには $stdout をいじるしかないわけだが
それをすると後者の $stdout.puts も捻じ曲がるんで意味がない
Ruby における 関数的メソッド puts と $stdout は不可分だ(C の puts を知ってると引っかかるかも)
もしなんらかの気の迷いで関数的メソッド puts の出力先の $stdout が標準出力以外になってるなら
それは putserr とか putsfile とかなんかメソッドを新たに作るべき

むしろ後者を書かれるとがっかりだ
むしろそのサイトなり解説書なり晒せ

186:デフォルトの名無しさん
09/11/03 11:15:02
バッチファイルの作成を自動化できないものかと思い、eruby がつかえそうだと思いました。

REM *******************************************
REM * 作成者:ビル・ゲイツ(マイクロソフト)        *
REM *******************************************

のようなファイルをつくりたいのですが、

REM *******************************************
REM * 作成者:<%=PERSON%>(<%=COMPANY>)     *
REM *******************************************

と定義して、行の末尾の '*' の位置を変えないことってできますか?




187:デフォルトの名無しさん
09/11/03 11:17:47
つか $stdout なら write すべきだと思うんだが
$stdout が指してるオブジェクトに puts というインスタンスメソッドが定義されてる可能性はそれほど高くない

188:デフォルトの名無しさん
09/11/03 11:20:47
>>186
文字列なんだから String のマニュアルをダメもとで読め
URLリンク(www.ruby-lang.org)

189:デフォルトの名無しさん
09/11/03 11:30:54
>>187
それはputsに応答しないオブジェクトを$stdoutに入れたヤツが悪くないか?
STDOUTがIOのインスタンスなんだし、IOやそのサブクラスのインスタンスであるか
相応のduck typingができることを期待するのは当然だと

実際に期待できない例にはどんなのがある?

190:デフォルトの名無しさん
09/11/03 11:46:20
$stdoutっていずれ廃止になるんだろ?
なるべく使わない方がいいんじゃねーの

191:デフォルトの名無しさん
09/11/03 11:48:21
$stderrなら警告メッセージのテストで使うことあるな。
begin
class << (stderr = "")
alias write <<
end
# テスト
$stderr, stderr = stderr, $stderr
ensure
$stderr, stderr = stderr, $stderr
assert_match(/.../, stderr)
end


192:デフォルトの名無しさん
09/11/03 11:49:05
>>190
廃止された$defoutと混同してないか?

193:デフォルトの名無しさん
09/11/03 12:24:41
>>190が代わりに何を使う気だったのかがちょっと気になる

194:182
09/11/03 18:12:54
たくさんのレスありがとうございます。勉強になりました。
公式も見てみましたが、
単にputsとした場合はKernelモジュールのputsを指し、
そのputsはデフォルトで$stdoutに対して出力をするようですね。
やっぱり冗長なだけなようですね。

>>187
>むしろ後者を書かれるとがっかりだ
>むしろそのサイトなり解説書なり晒せ

具体的には、「JavaプログラマのためのRuby入門」という本の初っ端の例文が
$stdout.puts 'hello world !'.upcase
となっていました。
著者のartonさんはコミッタですよね?

195:182
09/11/03 18:13:57
>>187ではなく>>185でした。すいません。

196:デフォルトの名無しさん
09/11/03 18:16:55
>>194
それはJavaのSystem.out.printlnになじんだ者が類推しやすいように
そう書いてあるんじゃあないか?


197:182
09/11/03 18:36:50
おおなるほど、そういうことだったのかな…。

198:デフォルトの名無しさん
09/11/03 19:36:32
その本は読んでないけど、読んだ者が混乱するような記述なら困りものだな
後ろの章を読めばわかるのかなとは思うけど

199:デフォルトの名無しさん
09/11/03 20:34:50
モジュールの場所を知るコマンドはありますか?
perlでいう perldoc -l のような。

200:デフォルトの名無しさん
09/11/03 20:55:12
>>199
ri
refe
他にもなんかあったような気がするけど忘れた

201:デフォルトの名無しさん
09/11/03 21:01:03
>>199
gem の場合は gem which

$ gem which nokogiri
(checking gem nokogiri-1.3.3 for nokogiri)
/home/me/.gem/ruby/1.8/gems/nokogiri-1.3.3/lib/nokogiri.rb

標準ライブラリの場所を探す方法はあれば知りたい
いちいち「/usr …のどこだっけ」と試行錯誤するのは面倒

202:デフォルトの名無しさん
09/11/03 21:23:14
>>199
gem whichはgem以外にも使えたはず

203:デフォルトの名無しさん
09/11/03 21:44:58
ほんとだ知らなかった
いいこときいた

204:デフォルトの名無しさん
09/11/03 21:54:21
$ gem which uri
/usr/lib/ruby/1.8/uri.rb

ほほう

String とか Regexp とか rb のファイルになってないものは駄目っぽいな

205:デフォルトの名無しさん
09/11/03 22:11:29
>>200-202
あざっす。

206:デフォルトの名無しさん
09/11/03 22:26:20
ライブラリもいけるみたいだな。
$ gem which Readline
/usr/local/lib/ruby/1.9.1/x86_64-darwin10.0.0/Readline.bundle

>>204
StringやRegexpでどのファイルに出てきて欲しいんだw


207:デフォルトの名無しさん
09/11/04 08:30:58
>>186
>と定義して、行の末尾の '*' の位置を変えないことってできますか?

<%= str = "#{person} (#{company)" %>
REM * 作成者:<%= '%-50s' % str %> *

とするしかない。

208:デフォルトの名無しさん
09/11/04 08:31:51
間違えた。
<% str = "#{person} (#{company)" %>
REM * 作成者:<%= '%-50s' % str %> *



209:デフォルトの名無しさん
09/11/04 09:23:58
Rubyの文字列は
"hello"と'hello'のように書けますが、皆さんはどちらをメインに使っていますか?
もちろん二つの書き方には違いがあることは理解してますが、
多くのケースではどちらの書き方でも可なので、そういう場合にどちらの書き方をすべきか迷っています。

個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。

ただ入門書やネットに転がってるサンプルなどを見ると大抵ダブルクウォーテーションのようです。
CやJavaなどの習慣でダブルを使う人が多いのでしょうか?あるいは他にメリットがあったりしますか?

210:デフォルトの名無しさん
09/11/04 10:13:32
そもそもとして、" " でも ' ' でも処理負荷的にはたいして変わらない
文字列を数まんことか大量に使用すれば若干違うかもしれんが、たぶん他の部分チューニングしたほうが速い

よって、それ以外が効いてくることになる

で、まあ、" " が人気があるのは
変数展開を入れようとしたときにクオート部分をわざわざ書き換えなくてもいいとか
\n とかがそのまま利用できて面倒がないとか
大部分のフォントで '' の文字見栄え的な安定性が低くて使っててガッカリだからとか
そういう理由だと思う

'hello\nworld' と書いてそのまま \n が表示されて「ん?」となるのは一度や二度ではない

211:デフォルトの名無しさん
09/11/04 10:27:08
俺は両方使い分けてるな
別にダブルクォートで統一してもいいとは思うんだけど
最近、なんとなくシングルクォートの方がきれいに見えるようになった
あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる

212:209
09/11/04 10:28:08
>>210
おおなるほど…分かりやすい説明ありがとうございます。
それだけ例を示されると確かにダブルクウォーテーションのほうが理にかなってますね。

213:デフォルトの名無しさん
09/11/04 10:29:56
>>211
ダブルクォートを最終的にシングルクォートに書き換えることはよくある
それはやっぱり意思表示だな

214:209
09/11/04 10:32:10
>>211
ありがとうございます。

>あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる
これは自分も思っていました。
変数展開が必要になった時にダブルクウォーテーションを使った方が目的がはっきりするというか。

215:209
09/11/04 10:42:19
ついでにRailがgenerateで吐くコードを調べてみました。

シングルクォート
flash[:notice] = 'Profile was successfully created.'
<%= link_to 'New profile', new_profile_path %>

ダブルクォート
format.html { render :action => "new" }

どっちも使ってる…。どういう基準で分けてるのかさっぱり分からない。
ただ適当なのか、何かちゃんとした理由があるのかな。

216:デフォルトの名無しさん
09/11/04 10:49:28
アトリビュートとみなせる(小さな)文字列はダブルクォートであることが多い
ハッシュのキーとか値とか、配列の短い文字列とか

あるいは生成されて埋め込まれた文字列とか

irb> 1.upto(10).to_a.map{|e| e.to_s}
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"] ←この部分をコピペ

深い意味は何もない
打ってる途中で
「あーシングルクォートでよかったなーと思ったが修正面倒なのでこのままダブルで閉じる未来の俺訂正よろしく」
とか普通なので気にしてたら禿げるぞ

217:デフォルトの名無しさん
09/11/04 11:08:33
String#inspect が吐く文字列がダブルクオートというのは意外と
強い動機になるよね。

218:デフォルトの名無しさん
09/11/04 14:10:01
>>209
>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。

このルールでいいと思う。あとは ¥n をいれるときとか。

219:デフォルトの名無しさん
09/11/04 18:36:31
そのルールに何の意味も無いだろ
面倒だし両方の表記が入り乱れることになるだけ
なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?

220:デフォルトの名無しさん
09/11/04 18:48:35
変数(というか、式)展開やバックスラッシュ記法の有効化は、すこし機能が強すぎる
その機能を使用しないのなら、そもそも機能が有効になっていないほうが好ましい

めんどいからダブルでいーじゃん、というのでももちろん構わないし
スクリプトに直接リテラルで書くぶんには実際上の問題は何もないが、
慎重にシングルとダブルを使い分けるという姿勢は賞賛されるべき

221:デフォルトの名無しさん
09/11/04 18:51:52
>>219
>なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
べつに嫌いとまでだれも言ってないけど。>>213が書いたように、シングルクォートを使うことで、
式展開もなにもありませんという意思表示をしているだけ。
なんでこんな曲解するやつがいるんだろうね。

222:デフォルトの名無しさん
09/11/04 20:03:43
Railsマンセーな俺は>>215>>216辺りを見てシングルを主に使っていこうと決めた
アトリビュートというかシンボルに置き換えられるのようなケースではダブルを使ってる気がする

223:デフォルトの名無しさん
09/11/04 21:01:01
Windows環境だとパス区切りがバックスラッシュな関係で
文字としてのバックスラッシュを扱いたい場合は多いな
>>210 とは逆に、バックスラッシュが解釈されるせいで「ん?」と思う場面のが多い

224:デフォルトの名無しさん
09/11/04 21:19:40
考え方は>>220に同感だけど、職場ではダブルクォートで統一されてる。
ネットで拾うサンプルも大抵ダブルクォートだ。
単純に、ダブルクォートで文字列を表現する言語が多いという理由だけの気がする。
コーディングスタイルにおいて慣習ってのは大きな要素なんじゃないかな。
○○にすべきだ、という100%正しい解釈があったとしてもそれが慣習に反していれば採用するのはやっぱり難しい。

225:デフォルトの名無しさん
09/11/04 21:30:24
100%正しい解釈などない

226:デフォルトの名無しさん
09/11/04 21:31:39
>あったとしても

227:デフォルトの名無しさん
09/11/04 21:34:04
信念を持って慣習を破るのは悪いことじゃないな。

228:デフォルトの名無しさん
09/11/04 21:34:12
Rubyの場合%表記使うことも多いからダブルクォートに対するこだわりなんか全くない

229:デフォルトの名無しさん
09/11/04 21:34:35
無意味な仮定ってことだろ

230:デフォルトの名無しさん
09/11/04 22:10:31
> 慣習
こないだ '%s' % str したらMatzの写真で踏み絵させられた
わかる人にはわかるらしい

ちなみに初めてのRuby的には
「後述のエスケープ文字や式展開を含まない場合、
一重/二重のどちらの引用符を用いるかは好みの問題です」(p.58)
だって

231:デフォルトの名無しさん
09/11/04 22:50:02
Ruby1.8.7でsqlite3を使いたく、環境を構築しました。

sqlite3-ruby(1.2.5)
dbi(0.4.3)
dbd-sqlite3(1.2.5)
sqlitedll-3_6_19

上記の環境でDBI経由だと
ERROR DBI::InterfaceError: Unable to load driver 'SQLite3' (underlying error: uninitialized constant DBI::DBD::SQLite3)

というエラーが発生します。
ドライバが見つからないと言うようなエラーだと思うんですが、全部最新です。
何が原因でしょうか?

232:デフォルトの名無しさん
09/11/04 23:50:35
ドライバを入れろ

233:デフォルトの名無しさん
09/11/05 00:06:05
>>231
×SQLite3
○sqlite3
db = DBI.connect("DBI:sqlite3:#{filename}")

234:デフォルトの名無しさん
09/11/05 00:44:56
>>231
ごめん>>233は間違い
うちは
db = DBI.connect("DBI:SQLite3:test.db")
で接続できた
ドライバはdbd-sqlite3で Unable to load driver だから
sqlite3自体がインストールされてない?

235:デフォルトの名無しさん
09/11/05 02:13:52
>>209
>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
>というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。

正解

236:デフォルトの名無しさん
09/11/05 04:09:19
%!hogehoge! 使うべさ

237:デフォルトの名無しさん
09/11/05 06:34:11
俺はハッシュの値とかも含めて基本全てシングル使ってるぞ
変数展開したい時だけダブル
これで特に困ったことは無い
空文字が''になるので、他人にソース見せる時に突っ込まれることはあるが。

238:デフォルトの名無しさん
09/11/05 08:22:34
ダミアン先生によると空文字は、%{}にしたほうがわかりやすいと

239:デフォルトの名無しさん
09/11/05 08:36:12
まあ''と"と"'と'''と''''と'"'と""と'"'と'''''の区別は咄嗟にはつけにくいからな
いちばんわかりやすいのは String.new だが

余談だが俺は配列も Array.new だしハッシュも Hash.new だ
自分から [] や {} を使うことはゼロ

240:231
09/11/05 08:39:55
>>232
>>231に書いた以外に必要なドライバがあれば
ドライバ名を教えてください。

>>234
一応 gem search を実行すると全部インストールされているんですが
sqlite3-ruby をインストールするときにリンク先のような状態になったのが
気になりました。
URLリンク(www.rubylife.jp)
そのほかはバージョンもそろえてるしSQLite3の本体も入ってるし、
もうどうすればいいのか・・・

241:デフォルトの名無しさん
09/11/05 08:51:14
新しく配列作る時って Array.new と [] って一般的にどっちがいいとかある?
好みの問題くらいでどっちでもいい?

242:デフォルトの名無しさん
09/11/05 09:12:05
初期値の存在しないふつうの空の配列を作るならどっちでもよい

10万個くらい Array.new と [] が書いてあったら、後者のほうがパース完了は遅いとは思うが

243:デフォルトの名無しさん
09/11/05 09:23:13
>>240
DBI.available_driversで使えるドライバがわかる
そこに"dbi:SQLite3:"が無ければインストールに失敗してる

244:デフォルトの名無しさん
09/11/05 10:06:41
初期値が無い場合は
var = Array.new
初期値がある場合は
var = ["hoge", "hogege"]
って感じだな。
特に理由は無いけどこういうパターンで書く人が多い気がする。

245:デフォルトの名無しさん
09/11/05 10:13:01
[] でいいじゃん

246:デフォルトの名無しさん
09/11/05 10:36:36


247:デフォルトの名無しさん
09/11/05 14:25:20
Array.new, Hash.new はメソッド呼び出しが入るので遅い。

248:デフォルトの名無しさん
09/11/05 15:03:37
>>244
そうかあ?初期値がなくても [] と {} を使うほうが多いと思うけど。
デフォルトの初期値が必要な場合だけHash.newとかを使うんじゃないか。

249:デフォルトの名無しさん
09/11/05 16:51:24
配列からある値を一つだけ削除って簡単にできる?
- とかdeleteだと複数あった時に全部消えちゃう

250:デフォルトの名無しさん
09/11/05 16:58:30
delete_at

251:デフォルトの名無しさん
09/11/05 17:01:43
>>249
簡単にはできない
若いの1個だけ消したいと予測

arr = ["a", "b", "c", "b", "a"]
arr.delete_at(arr.index('b'))
p arr

["a", "c", "b", "a"]


252:231
09/11/05 18:21:11
>>243
driver = DBI.available_driversしてみました

ArrayEmptyでした orz=3

一度アンインストールしてインストールし直しても同じです
どうやればインストール成功するんでしょうか(´;∀;)

253:249
09/11/05 18:50:35
>>250,251
なるほどね見つけてから_atで消すのね
ありがとう

254:231
09/11/05 19:19:05
sqlite3-ruby dbi dbd-sqlite のバージョンを下げたりしてみたけど
やっぱりドライバが認識されませんでした
同じコードとドライバでも1.9.1だと動きまする・・・

255:デフォルトの名無しさん
09/11/05 19:24:01
インストール手順を示さないとアドバイスしようがないと思ふ

256:231
09/11/05 20:05:44
解決しました。いや、解決はしてませんが、ドライバが原因では無いことはわかりました。
NetBeans6.7.1でデバッグをすると「ドライバがないぞゴルァ」って言われるんですが
コンソールから実行すると何事もなかったように動きます。

どうもお騒がせしました。

257:デフォルトの名無しさん
09/11/05 21:30:32
えええええw

258:デフォルトの名無しさん
09/11/05 22:32:30
コンソールから使ってるRubyとNetBeansから使ってるRuby
が違うんでないかい?


259:231
09/11/05 22:41:01
>>258
自分もそう思って確認したんですが
インストールされてるバージョンは1.8.7-p72と1.9.1-p243の二つしかなく
コンソールもねとびーんも1.8.7-p72を使ってました。
ねとびーんのGemマネージャにも、きちんとドライバは登録されていました。
その後も色々試していますが、未だに原因がわかりませんです。

260:デフォルトの名無しさん
09/11/06 01:03:10
printf("%d %d\n", n, n+1)の出力にマッチする正規表現は書けますか?

261:デフォルトの名無しさん
09/11/06 01:29:25
動的に正規表現を生成するのでも構わないのなら

n = 3
"%d %d\n" % [n, n + 1] =~ Regexp.new("%d %d\n" % [n, n + 1]) #=> 0


ところで以下には驚いた。勉強しなおさないとだ

'%d %d\n' % [n, n + 1] =~ Regexp.new('%d %d\n' % [n, n + 1]) #=> nil
"%d %d\n" % [n, n + 1] =~ Regexp.new('%d %d\n' % [n, n + 1]) #=> 0

262:デフォルトの名無しさん
09/11/06 01:40:43
>>261
s = '%d %d\n'
p /#{s}/ # /%d %d\n/と等価

文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される

似たような話としては、String#gsubで引数に\を渡そうとすると
ダブルクォートの場合はエスケープの都合で\の個数がキモいことになる

263:デフォルトの名無しさん
09/11/06 02:17:32
>>262
サンクス。完全に間違って理解してた
> 文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される
よく覚えとくよ

で、>>261でなんではまったかと思ったら普段あまり使わないRegexp.new使ってるからだった
'\n' にマッチする正規表現をリテラルで作ろうとしたら /\\n/ って直感的に書けるけど
Regexp.new で作ろうとすると相当キモイことになるね

264:デフォルトの名無しさん
09/11/06 06:35:26
質問です。
さくらインターネットのスタンダードプランでrubygemをインストールしたのですが,
gemコマンドを打ち込んでも
gem: command not found
と、出てしまいます。
これはインスト失敗しているのか、単に環境設定がうまくいってないのか…。
ご教授願います。

インスト時には
wget URLリンク(rubyforge.org)
tar zxvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb --prefix $HOME

で、
RubyGems installed the following executables:
/home/hogehoge/bin/gem18
と出ていました。

265:デフォルトの名無しさん
09/11/06 06:38:37
じゃあ/home/hogehoge/bin/gem18って打ち込めば

266:260
09/11/06 08:02:12
>>261
動的でもいいんですがnの値は不明です。
一旦nを求めて式展開するしかないでしょうか?
一回で
line =~ /(\d+) #{\1.to_i + 1}/
みたいには書けない?

267:デフォルトの名無しさん
09/11/06 08:08:12
実効上のご利益がないのでどうでもいいのだが正規表現を先に書いてくれると嬉しい

/re/ =~ str

268:デフォルトの名無しさん
09/11/06 08:22:50
>>264
PATHの設定。


269:デフォルトの名無しさん
09/11/06 08:23:59
それと、 gem じゃなくて gem18 と入れることか。


270:デフォルトの名無しさん
09/11/06 08:29:54
>>264に足りないのは(PC-)UNIXの知識だな
Ruby関係ないシリーズの筆頭だ

はいそこさくらが使ってるFreeBSDがUNIX4文字で包括されうるかどうか議論しない

271:デフォルトの名無しさん
09/11/06 08:32:18
ruby2.0はいつ出るのじゃ

272:デフォルトの名無しさん
09/11/06 08:35:10
>>271
その質問には意味がない

273:デフォルトの名無しさん
09/11/06 08:43:54
新しいバージョンを待つ香具師は、そのバージョンが出たら
その次のバージョンを待つことになる。



274:デフォルトの名無しさん
09/11/06 10:46:28
1.9もまだ満足に移行出来てない状況でw

275:デフォルトの名無しさん
09/11/06 11:09:59
2.0になった場合の変更予定点とかってもう案があったりするの?

276:デフォルトの名無しさん
09/11/06 12:45:25
>>275
それこそ1.8の出る前からある。

277:デフォルトの名無しさん
09/11/06 16:43:52
だから待ち焦がれてる椰子が多いんだよ。
Ruby2.0が出たらそのサブセットをどっかで標準化したりするのかね。

278:デフォルトの名無しさん
09/11/06 18:15:47
2.0はこうなる!
みたいな解説どっかにある?

279:デフォルトの名無しさん
09/11/06 19:26:11
ないでもないけど(Ruby Riteで検索すれといくつか)大昔のものなので、
1.9で実現しちゃったもの(YARVとか)もあれば、方針転換があったりしたものが
(たとえば括弧の省略があまりできなくなる方向で動いてたのを、断念しちゃったり)
あったり、全く刷新の気配もないもの(GCとか)とかで、全然参考にならない。

280:231
09/11/06 19:33:23
必要ないかも知れないですが経過報告です。

全く違う別のPCで1.8.7-p72、NetBeans6.7.1という同じ環境を構築して
SQLite3をDBI経由で読んでみましたがコンソールからだと問題無く動くコードが
同じエラーになりました。ドライバが認識出来ないようです。
同じコードでも1.9.1だとNetBeans6.7.1でも問題無く動作するので環境の問題のようです。

もし上の環境でDBI経由でSQLite3が使えてる人がいたらアドバイスください。

281:デフォルトの名無しさん
09/11/06 19:50:20
txt = open('hoge.txt').read

ってするとオープンされたファイルのストリームは開いたままですか?

282:デフォルトの名無しさん
09/11/06 20:03:17
>>281
えーーーーと、
クラスメソッド File.open は File オブジェクトを返すだけ
関数的メソッド open も File オブジェクトを返すだけ
インスタンスメソッド File#read はストリームを閉じない
クラスメソッド File.read は File オブジェクトを開いて File#read して閉じて read 結果を返すユーティリティ的メソッド

File.open(path).read は不完全
open(path).read も不完全

File.read(path) は安全
File.open(path){|f| f.read} は安全
open(path){|f| f.read} も安全

ブロックつきメソッドで書けるメソッドは、ブロック作らないと危険
ブロックつきメソッドで書く意味がなさそうなメソッド(File.read、File.readlines 等クラスメソッド)はブロック作らなくても安全

クラスメソッドは「便利メソッド」として作られてることが多い

283:デフォルトの名無しさん
09/11/06 20:05:12
>>281
GCされるかスクリプトが終了するまで開いたまま
ちゃんと閉じるか閉じてくれる書き方をするクセをつけたほうがいい

手っ取り早いのはこれ
txt = File.read('hoge.txt')
本当はIO.read、ただし1.9系じゃないとこの方法でbフラグ付けるのは無理

284:デフォルトの名無しさん
09/11/06 22:39:33
IO.binreadは1.9だっけか


285:デフォルトの名無しさん
09/11/07 01:20:25
String::squeezeの使い道が分からない

286:デフォルトの名無しさん
09/11/07 02:19:12
1.9はvistaの様に飛ばして、2.0のsp2が出るまで1.8で耐えた方が良さそうw

287:デフォルトの名無しさん
09/11/07 05:32:37
今までrubygemsで取得できるもので済んでいたのですが、
tar.gzで配布されているruby-clusterやruby-gnome(gtk?)を使うことになり、
Emacsでのanythingやauto-complete-rubyでも↑のライブラリを読み出して欲しいと思って調べたのですがわかりませんでしたので質問させてもらいます。
anythingではfri -lやrefe -lの結果から候補を、auto-complete-rubyではrcodetoolsからどうにかして候補を出しているみたいなのですが、
そのソースとなるのはtar.gzがもつドキュメントorコードから生成されたドキュメント(?)を元にしているみたいなのです。
そのようなドキュメントを生成するのはrdocなんでしょうか?そうだとしたらどのように生成すればいいでしょうか?
rdoc --riとやって.rdocの中に色々とできているのですが、そこをLOAD_PATHに加えればいいのでしょうか?

長くなってすいません。

288:デフォルトの名無しさん
09/11/07 16:37:36
Rubyで外部コマンドを単純に実行したいときで質問。
変数hogeにデータが入っていてこれを引数としてコマンドを実行したい。

system("command", hoge)

なら安全?
例えば、パイプでつなげられてrm -rfされる心配はないか、とか。

289:デフォルトの名無しさん
09/11/07 16:50:01
はい
sysytem 等の第2引数はシェルを介しません

irb> system('ls', '-la|date')
ls: invalid option -- '|'
詳しくは `ls --help' を実行して下さい.
irb> system('ls -la|date')
2009年 11月 7日 土曜日 16:42:32 JST

ls が | についてのエラーを返していることに注目です
| を含んだ引数を ls コマンドに直接渡している証拠です

ただ、この場合、第1引数は完全に正しい実行可能文字列でなければなりません
オプションとかなんか余計なものを含んでいた場合はエラーです

irb> system('echo ', 'hello!')
false
irb> system('echo', 'hello!')
hello!

「echo 」という末尾に空白を含んだ実行ファイルは存在しないためコマンドが実行されず、system が false を返しています

290:デフォルトの名無しさん
09/11/07 16:55:35
>>289
ありがとう。

291:デフォルトの名無しさん
09/11/08 10:16:43
テンプレに

・Ruby 1.9.0
 不安定にして先鋭機能が超満載の開発版バージョンだったもの
 1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)

とありますが、どう事情が変わったのでしょうか?

"1" + 1 とするとエラーが出てしまいます。
エラー内容的には 整数を文字列に出来ないよ。 ということだと思っています。
しかし、 1.to_s を実行すると "1"が返ってきて、1.to_s.classはStringだと言っています。
数値の 1 を文字列に変換することは出来ているのに上記のようなエラーが出る理由が分かりません。
教えてください。

292:デフォルトの名無しさん
09/11/08 10:23:14
Rubyは、その種の暗黙の変換はしないので、

"1".to_i + 1 #=> 2がほしいとき
"1" + 1.to_s #=> "11"がほしいとき



293:デフォルトの名無しさん
09/11/08 10:53:20
オブジェクトが違ってるということはプログラミングの手順が間違ってるということがほとんどなわけで
こういう場面では暗黙の変換をしてもらわないほうが多くの場合は便利

動作と投入値のとり得る全てを事前に完全把握してる場合は暗黙の変換をしてもらったほうが面倒ないけどな
まあそういう時はRubyにこだわらず適当にそういう動作の言語使ってだらっとプログラム書けばええ
とりあえずRubyはその手の変換は行わないようにメソッドが作られてることが多い
困ったことに + 系のメソッド内でクラス比較して変換かけてるパターンもあるけどな

>>291
> どう事情が変わったのでしょうか?
このままだとバージョンナンバーを普通に使い切ってしまい
栄光のバージョン2.0が普通の1.9の上位バージョンになってしまうという危惧
1.9.0を元にした安定版を出す際に、通常のバージョンのつけ方なら
 ・ 1.9.x … 開発版
 ・ 2.0.x … 安定版
となるはずだし従来はこの予定だったのだが、2.0の名には値しないと判断されて、無理矢理
 ・ 1.9.0 … 開発版
 ・ 1.9.1 … 安定版
とされたということ


294:デフォルトの名無しさん
09/11/08 15:19:36
じゃあ、1.9.1は2.0ってことですか

295:デフォルトの名無しさん
09/11/08 15:23:13
matzを罵ってやる!

296:デフォルトの名無しさん
09/11/08 15:28:41
Rubyでは、2.0は人参と呼ばれている。
「開発者のモチベーションを引っ張り続けるが到達できないもの」
来世紀くらいには追いつけるかもしれないがユーザーが待つのは馬鹿。


297:デフォルトの名無しさん
09/11/08 15:46:26
まあ10年くらいしたらなんとかなんじゃねえの、とは思う
少なくとも5年では無理

298:デフォルトの名無しさん
09/11/08 15:47:49
なにが人参だか。どうでもいいわ

299:デフォルトの名無しさん
09/11/08 16:01:55
RubyにはRubyしか知らない人が多いというのはやっぱり真実なのだと思う
ようはPerl6と同じことだろ

300:デフォルトの名無しさん
09/11/08 16:23:16
>>285
String#squeezeはたぶん正規化じゃないかなぁ

require 'jcode'; $KCODE = "s" # 1.9なら不要
Words = %w(google キター).map {|s| s.squeeze }
def exist?(s); Words.index(s.squeeze); end
p exist?("goooooogle")
p exist?("キターーーー")


301:デフォルトの名無しさん
09/11/08 16:23:36
PHP6、Perl6、Ruby2のうち一番早くリリースするのはどれですか?

302:デフォルトの名無しさん
09/11/08 16:48:32
やっぱり1.9sp2まで待ちだな。

303:ダーク藤本 ◆ULFoMaooII
09/11/08 17:12:54
SB3.5改
URLリンク(ux.getuploader.com)

Rubyは多次元配列の仕様が糞すぎる
まぁ多次元配列なんてWEBプログラマーには不要なもんだがw

304:デフォルトの名無しさん
09/11/08 17:29:27
Rubyの多次元配列?
それなんていうライブラリ?

305:デフォルトの名無しさん
09/11/08 17:42:01
ruby 1.9.3あたりが安定版になっても俺は驚かない
驚かないが、「またユーザーを混乱させるのか・・・」と思う

306:デフォルトの名無しさん
09/11/08 17:56:09
>>305
1.9.1 以降は全部、1.9 系列の安定版だよ
1.9.2 が出たとしたら、それは1.9系列の最新安定版
1.9.3 が出たとしたら、それは1.9.2より新しい、1.9系列の安定版

開発版は常に 1.9.0
パッチレベルが上がるんだったかなんだったかで区別するとかしないとか
1.8.5やそれ以前のような「とりあえずリリース」はない
tenny(バージョン x.y.z の z)が 0 でないときは必ず安定版リリース

この理屈だと Ruby 2.0.0 は 2.0 系列の開発版ということになるが、まあそういうことなのだろう
情報の古いうっかりさんが「これが Ruby2.0 か」とか勘違いして 2.0.0 をインストールしてシステム壊すとかそういうの希望

まー 1.9.1 の中でもパッチレベルが違うと動作違うけどな(正しくなっただけなのだが)
1.8.6 でもあったが、なかなか酷い

307:デフォルトの名無しさん
09/11/08 17:57:08
驚き最小の法則w

308:デフォルトの名無しさん
09/11/08 17:59:44
>>307
情報の古いうっかりさんこんばんは

309:デフォルトの名無しさん
09/11/08 18:01:51
URLリンク(ja.wikipedia.org)驚き最小の原則
結城浩は1996年、この原則を人間関係を円滑にすすめるための心得に拡張し、「驚き、最小の法則」として紹介した。
たとえば、プログラムを顧客に納品する際に、判明しているバグがあるのなら、それを伝えておいたほうが顧客に
とっても利用時の戦略を立てやすくなる、といったものである。「『どうしようかな?』と思ったときには、 相手の
『驚き』を最小にするような選択をすべき」であるという[1]。

プログラミング言語 Ruby は、一時期「驚き最小の原則」とともに語られることが多かった。ただし、作者のまつもと
ゆきひろはこの原則を Ruby の設計哲学として採用したことはないと述べている[2]。Ruby については、「さまざまな
バックグラウンドの人々すべてを驚かせないことではなく、Ruby のやり方に十分に慣れた人が持つ常識が一貫して通用
するという意味」[3][4]であるとして、「Matzの驚き最小の原則」という言い方も提案された[3]。現在では Ruby が
「驚き最小の原則」とともに語られることは少なくなっている[5]。

310:デフォルトの名無しさん
09/11/08 18:04:35
驚きの連続w

311:デフォルトの名無しさん
09/11/08 18:09:19
>>309
コミュニティ内では「Rubyらしい動作」という言葉で語られる概念だな
Rubyらしい動作をするクラスやメソッドは推測が利いて使いやすい、という程度の意味

312:デフォルトの名無しさん
09/11/08 18:10:14
一時期のruby-talkとかひどかったもんな。

いろんな言語バックグラウンドを持つ香具師が、想定外の挙動に対して
「これは驚き最小に反している!」
そして「おめーにとってはそうだろうがよ」と総ツッコミ。


313:305
09/11/08 18:19:50
>>306
説明ありがとう! 1.9.1からルールが完全に変わったんだな

> ruby 2.0.0 は 2.0 系列の開発版
そうなるのか? ruby 2.0.0 からまた元のルールに戻るとかじゃなくて?
そうなるんだとすると、本当に訳が分からなくなりそうだ

314:デフォルトの名無しさん
09/11/08 18:23:52
>>313
2.0 系列の開発版は常に 2.0.0
2.0.0 で安定版が作れたと思ったら 2.0.1 としてリリース
2.0.1 がパワーアップしたら 2.0.2 としてリリース
2.0 系列の次のバージョンの開発版を作る場合は 2.1.0 でやる

こんだけ
x.y.z の y だか z だかが奇数のときは開発版で偶数は安定版、みたいな
冷静に考えるとへんてこなルールと実質上は何も変わらない

315:デフォルトの名無しさん
09/11/08 18:32:54
>>314
ソース求む。

どこにもそんな話、なかったと思うんだが。

316:デフォルトの名無しさん
09/11/08 18:46:28
ruby 1.9.3あたりが安定版になっても俺は驚かない
驚かないが、「またユーザーを混乱させるのか・・・」と思う

317:デフォルトの名無しさん
09/11/09 00:40:14
順調に迷走してるね、この言語。

318:デフォルトの名無しさん
09/11/09 01:17:13
迷走してるのはおまえの脳みそだろw

319:デフォルトの名無しさん
09/11/09 02:02:57
すくなくとも驚き最小の原則を標榜している言語が
脳みそを掻き回したらいかんだろ

320:デフォルトの名無しさん
09/11/09 02:09:56
>>319
Rubyのことなら、標榜してないよ。


321:デフォルトの名無しさん
09/11/09 02:13:44
よそから飛んできたんでひょっとしたら320は空気が読めてなかったかもしれない

322:デフォルトの名無しさん
09/11/09 02:18:43
ruby厨WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

323:デフォルトの名無しさん
09/11/09 08:23:38
一時期のRuby厨が荒らしてたPythonスレみたいになってるw

324:デフォルトの名無しさん
09/11/09 09:33:42
2.0が出てもみんな1.8.7を使いつづけるというオチでは?

325:デフォルトの名無しさん
09/11/09 09:44:20
そこはJRubyでしょ

326:デフォルトの名無しさん
09/11/09 11:24:20
C言語みたいにクラス定義を別ファイルに書きたいのですが
#include "MyClass.h"
に相当するRubyの命令がわかりません。
手持ちの本にも載っていません。
誰か教えてください。


327:デフォルトの名無しさん
09/11/09 11:27:40
require

328:デフォルトの名無しさん
09/11/09 18:12:07
>>326
require "myclass" # myclass.rb を読み込む

329:デフォルトの名無しさん
09/11/09 19:50:19
この言語って他の言語にある程度慣れてる人が多い?
プログラミングはRubyからです!って人は少なそう。

330:デフォルトの名無しさん
09/11/09 20:01:19
>>329
Ruby から始めましたが。
理由は、基本的な構文はどの言語も似ていると思ったので...

331:デフォルトの名無しさん
09/11/09 20:27:41
VBA → ちょっとだけJavaScript → VB.NET → C# → Ruby

332:デフォルトの名無しさん
09/11/09 21:14:56
rubyから始めましたってのはニート出身のPGとかだけだろ
学歴ある奴はあり得ん

333:330
09/11/09 21:19:51
>>332
大学で始めてプログラミングやった子なのかな?(^^;

334:デフォルトの名無しさん
09/11/09 21:20:44
>>332
なにその根拠のない自信?ホントにプログラマ?

335:デフォルトの名無しさん
09/11/09 21:21:53
>>332
ム板池よITドカタ

336:デフォルトの名無しさん
09/11/09 21:21:59
おまいら釣られすぎですよ

337:デフォルトの名無しさん
09/11/09 21:56:53
マジレスすると大学で覚えるプログラミングなんて大したことなくね?
いいとこの大学でもC言語を基礎から教えてたりするわけだし、そんな状態から4年間での伸びしろなんてたかが知れてる。
その周りの専門知識は大学じゃないと勉強するのは難しいかもだけど、実務で生かせてる知識がどれほどあるか。、
自分の大学生活が薄っぺらかっただけなのかな?
中卒高卒でも小さい頃から趣味でプログラミングやってた奴らには勝てる気がしないんですよ。
なんというか、雑学というか知識の幅というか、そこら辺が埋めようの無い差を感じる。

338:デフォルトの名無しさん
09/11/09 22:01:57
安心しろ、ラジオを分解すらしたことがなくても
電気電子系の学科に進学する、という人が増えている。

今はそういう時代。

339:デフォルトの名無しさん
09/11/09 22:02:52
モチベーションの差とかもあるかな
大学出てない奴は少なからず劣等感を持ってると思う
うちの会社に大学中退者が何人かいるんだが彼らのハングリー精神は恐れ入るよ

340:デフォルトの名無しさん
09/11/09 22:28:33
>>337
小さい頃からプログラミング続けてる人はベースが完璧にできあがってるし
そういう基礎的な部分で苦労しない分、応用とか開発にリソース使えるんだろうね

341:デフォルトの名無しさん
09/11/10 01:15:40
小さい頃からプログラムやってる人はうらやましいね。
田舎だとそういう情報もハードも少なくて外で走り回ってるくらいだったよ。
その年頃でマイコンとかやってる奴とかいるかと思うと・・・。
まだ、勉強し続けなきゃならないな

342:デフォルトの名無しさん
09/11/10 02:17:28
あとは環境かねぇ。
親の環境次第で当時、高価なPCを買えたかどうかとか。

343:デフォルトの名無しさん
09/11/10 03:48:57
子供の頃、親が遊びに投資してくれたかどうかで
将来がだいぶ変わるよな
ゲームばっかすんなとか言うけど
そこからプログラムに入れば職業につながる可能性だってあるんだしね

遊びの価値を理解してない人が多い気がする
自分の場合、学校で教わったことなんかより
遊んだ分の知識の方がメシの種になってる

勉強し倒したか、遊び倒したかという極端な人ほど
「使える」人になってる気がする

>>342
今は高価な PCじゃなくても、そこそこの性能で
今の子供はうらやましいよね

344:デフォルトの名無しさん
09/11/10 05:24:12
そう言われてみれば、消防ん時からプログラミングやってる俺は
親がオーバークロックとか日常茶飯事な自作erだなあ

物心ついた時には周りにPCパーツ転がってたし
俺がPCに興味持ったと知るや、いきなりパーツ屋連れてかれたなw

ま、結局それはあんまり肌に合わなくて
PCじゃなく、ソフトウェアを組む方にハマったんだが

345:デフォルトの名無しさん
09/11/10 05:52:33
今の子供は羨ましくもあるが、
ネットも無く毎日外で秘密基地とか作って遊んでた自分の小学生時代はこれはこれで良かったと思ってる。

346:デフォルトの名無しさん
09/11/10 06:23:59
一方小学生の>>344はアメリカの某サーバにバックドアを仕掛けた


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch