もう20時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]萌えなネコ写真。[PR]  

Ruby 初心者スレッド Part 32

1 :デフォルトの名無しさん:2009/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つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す 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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

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

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

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

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

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

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

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

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

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

4 :デフォルトの名無しさん:2009/10/24(土) 06:21:53
関連スレ
・Rubyについて Part 37
 http://pc12.2ch.net/test/read.cgi/tech/1251029267/

アンチスレ
・Rubyについて(アンチ専用) Part004
 http://pc12.2ch.net/test/read.cgi/tech/1249737531/

Railsスレ
・【Ruby】Ruby on Rails Part8
 http://pc11.2ch.net/test/read.cgi/php/1252842574/

Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
 http://pc11.2ch.net/test/read.cgi/tech/1155031689/

Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
 http://pc11.2ch.net/test/read.cgi/tech/1201603546/


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

Ruby 初心者スレッド Part 31
http://pc12.2ch.net/test/read.cgi/tech/1253176267/

Ruby 初心者スレッド Part 30
http://pc12.2ch.net/test/read.cgi/tech/1249687283/


6 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/24(土) 07:07:22
おまけ

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

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

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


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


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

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

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


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

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

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

11 :デフォルトの名無しさん:2009/10/24(土) 17:44:09
http://jp.rubyist.net

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

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

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

cucumber 0.4.2
ruby 1.8.7
Windows Vista SP2

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

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

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

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

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

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

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

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

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


20 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 00:14:09
>>19
def f
prc = Proc.new
n = prc.arity
p n
end
f{|a,b,c| } #=> 3

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

32 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 02:31:36
そういえば1.8.7のブロックなしmapは扱いが特殊だったな。


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

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

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

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

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

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

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

41 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 07:44:14
これってバグになりますか?

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


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

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

45 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 08:26:23
>>45
できるはずだけど、もし自分でできないならCGIExceptionをインストールしてみたら?
ttp://cgi-exception.rubyforge.org/

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

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

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

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


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

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

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

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

だと思う

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

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

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

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

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

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

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

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

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

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

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

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

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

62 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 19:25:11
あ、CGIだっけ?content-type吐き出すの忘れてた

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

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

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

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

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

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

69 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/25(日) 22:59:13
gem なら require 'rubygems'


71 :69:2009/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:2009/10/25(日) 23:02:09
参考に観てたblogのソースだと空白が仕込まれてたみたいです。。
>>70さん ありがとございました。

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


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

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

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

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

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

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

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

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


82 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/26(月) 06:20:08
p0で失敗しても文句は言えんな

84 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/26(月) 08:15:39
Ruby1.9.1 の Windows 用でそれをするとはいろいろな意味でチャレンジャーというか煽り屋というか

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

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

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

88 :デフォルトの名無しさん:2009/10/26(月) 08:33:12
ttp://rubyforge.org/frs/?group_id=167
ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない

89 :12:2009/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 :デフォルトの名無しさん:2009/10/26(月) 12:49:19
とりあえず ruby が糞だということは良く伝わりました
本当にありがとうございました

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

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

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

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

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

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

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

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

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

99 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/27(火) 06:35:07
よーわからんが、Marshalはオブジェクト全体の復元しかできない
復元してからオブジェクトが同一かどうかチェックするしかないな

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

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

102 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/27(火) 07:29:36
>>101
>クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

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

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

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

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


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

107 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/27(火) 08:08:23
すいません、最後は a.ver が 0 のとき
if a.ver < current_version の間違いですね

109 :デフォルトの名無しさん:2009/10/27(火) 09:13:30
>>105
1. は ttp://jp.rubyist.net/magazine/?0017-CodeReview#l17


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

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

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

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

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

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

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

118 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/10/27(火) 11:13:36
>>117
Dir.glob("Data/*/1.html") do |file| ... end


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

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

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

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

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


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

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

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

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

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

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

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

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

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



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

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



パッケージ画像
http://gs.inside-games.jp/_files/images/9696.jpg

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

132 :12:2009/10/28(水) 10:00:08
誤爆

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

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

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

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

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

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

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

134 :12:2009/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 :デフォルトの名無しさん:2009/10/28(水) 12:19:05
cygwinのttyはWindowsのコンソールとは見なされないからね。
それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。

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


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

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

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

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

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

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

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

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

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

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

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

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

146 :143:2009/10/29(木) 17:26:50
>>144-145
あざっす!!

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

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

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

149 :デフォルトの名無しさん:2009/10/29(木) 21:34:35
>>147
使ったことないけど、http://rubyforge.org/projects/krb5-auth/ とかかな。


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

188 :デフォルトの名無しさん:2009/11/03(火) 11:20:47
>>186
文字列なんだから String のマニュアルをダメもとで読め
ttp://www.ruby-lang.org/ja/man/html/String.html#ljust

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

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

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

191 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/03(火) 11:49:05
>>190
廃止された$defoutと混同してないか?

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

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

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

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

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

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


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

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

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

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

201 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/03(火) 21:23:14
>>199
gem whichはgem以外にも使えたはず

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

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

ほほう

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

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

206 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/04(水) 08:30:58
>>186
>と定義して、行の末尾の '*' の位置を変えないことってできますか?

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

とするしかない。

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



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

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

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

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

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

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

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

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

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

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

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

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

215 :209:2009/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 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/04(水) 11:08:33
String#inspect が吐く文字列がダブルクオートというのは意外と
強い動機になるよね。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

231 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/04(水) 23:50:35
ドライバを入れろ

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

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

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

正解

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

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

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

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

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

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

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

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

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

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

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

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

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

246 :デフォルトの名無しさん:2009/11/05(木) 10:36:36


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

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

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

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

251 :デフォルトの名無しさん:2009/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:2009/11/05(木) 18:21:11
>>243
driver = DBI.available_driversしてみました

ArrayEmptyでした orz=3

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

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

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

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

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

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

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

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


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

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

261 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/06(金) 01:40:43
>>261
s = '%d %d\n'
p /#{s}/ # /%d %d\n/と等価

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

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

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

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

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

インスト時には
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
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 :デフォルトの名無しさん:2009/11/06(金) 06:38:37
じゃあ/home/hogehoge/bin/gem18って打ち込めば

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

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

/re/ =~ str

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


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


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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

282 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/06(金) 20:05:12
>>281
GCされるかスクリプトが終了するまで開いたまま
ちゃんと閉じるか閉じてくれる書き方をするクセをつけたほうがいい

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

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


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

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

287 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/07(土) 16:37:36
Rubyで外部コマンドを単純に実行したいときで質問。
変数hogeにデータが入っていてこれを引数としてコマンドを実行したい。

system("command", hoge)

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

289 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/07(土) 16:55:35
>>289
ありがとう。

291 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 10:23:14
Rubyは、その種の暗黙の変換はしないので、

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



293 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 15:19:36
じゃあ、1.9.1は2.0ってことですか

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

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


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

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

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

300 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 16:23:36
PHP6、Perl6、Ruby2のうち一番早くリリースするのはどれですか?

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

303 :ダーク藤本 ◆ULFoMaooII :2009/11/08(日) 17:12:54
SB3.5改
ttp://ux.getuploader.com/clonegameup/download/56/SB3.5%E6%94%B9.zip

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

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

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

306 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 17:57:08
驚き最小の法則w

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

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

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

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

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

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

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


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

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

314 :デフォルトの名無しさん:2009/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 :デフォルトの名無しさん:2009/11/08(日) 18:32:54
>>314
ソース求む。

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

今はそういう時代。

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

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

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

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

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

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

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

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

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

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

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

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

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

347 :デフォルトの名無しさん:2009/11/10(火) 08:38:29
25までニートやってた俺はお前らには無いエナジーで溢れてる
俺の人生はこれからだ

348 :デフォルトの名無しさん:2009/11/10(火) 09:22:42
プログラミングなんて義務教育終わる前に覚えとくもんだろう

ところで、最近は東大の教養課程でruby教えてるそうなので、
rubyでプログラミングを始めた高学歴というのは普通にいるんじゃね?

349 :デフォルトの名無しさん:2009/11/10(火) 12:17:41
>>348
一行目と三行目以下の矛盾がひどいなオイ

350 :デフォルトの名無しさん:2009/11/10(火) 12:26:37
rubyの起動時間を調べてみました。1.9遅ッ!
簡単なwxRubyアプリケーション。起動してから画面が出るまでの時間。
ストップウオッチ法。WindowsXP。3GHzのPentium4。

1.8.7p174 平均 1.7秒
1.9.1p243 平均 5.6秒

1.9はコンパイラを分離したほうがよくね?

351 :デフォルトの名無しさん:2009/11/10(火) 12:34:46
1.9って高速化されるんじゃなかったの?

352 :デフォルトの名無しさん:2009/11/10(火) 12:35:29
×rubyの起動時間
○ mswin32版ruby経由のwxRubyの起動時間

353 :デフォルトの名無しさん:2009/11/10(火) 13:22:48
>>349
べき論と現実とは普通に食い違ってるもんじゃないか

354 :デフォルトの名無しさん:2009/11/10(火) 13:26:29
NACLの瀬崎さんという女性はかわいいって本当ですか?

355 :デフォルトの名無しさん:2009/11/10(火) 13:32:43
初心者はそんな質問しません

356 :デフォルトの名無しさん:2009/11/10(火) 13:42:12
>>352
wxRubyはライブラリです。起動などしませんとか文句が出そう

357 :デフォルトの名無しさん:2009/11/10(火) 14:01:28
>>354
こんなん見つけました
ttp://luck.linux.or.jp/esokai/esokai2.html

358 :デフォルトの名無しさん:2009/11/10(火) 14:15:48
>>353
>>348一行目の書き方だと、べき論じゃなく常識を語ってるようにしか読めん

359 :デフォルトの名無しさん:2009/11/10(火) 14:22:24
学校教育と義務教育がごっちゃになってるようにしか読めなかった

360 :デフォルトの名無しさん:2009/11/10(火) 14:37:26
学歴話はスレ違い

361 :デフォルトの名無しさん:2009/11/10(火) 14:46:29
>>360
学歴の話なんて誰もしてねーよ

362 :デフォルトの名無しさん:2009/11/10(火) 15:23:21
Enumerable#inject() を自前で定義すると、どうなりますか?
初期値が省略できないと仮定すると、

def inject(init)
 accum = init
 each do |x|
  accum = yield(accum, x)
 end
 return accum
end

でいいと思うんですけど、「初期値が省略されたときは最初の要素を使う」というのがうまく書けません。

def inject(init=nil)
 if init.nil?
  flag = false  # 初期値がない
 else
  flag = true  # 初期値がある
 end
 accum = init
 each do |x|
  if ! flag   # もし初期値がないなら
   accum = x  # 最初の要素を初期値として使う
   flag = true
  else
   accum = yield(accum, x)
  end
 end
 return accum
end


363 :デフォルトの名無しさん:2009/11/10(火) 16:13:51
じっくり見てないけど、nilで判定するとnilを初期値に指定できなくなるから、
*argsで受けてsizeをチェックしたほうがいいんじゃない?


364 :デフォルトの名無しさん:2009/11/10(火) 16:29:28
def inject(*args)
 accum = args.empty? ? e.next : args.first
 begin
  loop { accum = yield(accum, e.next) }
 rescue StopIteration
 end
 accum
end

1.8.6とかSymbolとかシラネ

365 :デフォルトの名無しさん:2009/11/10(火) 16:31:10
ミスった、最初にこれやっといて
e = each


366 :デフォルトの名無しさん:2009/11/10(火) 16:44:50
Rubinius の Enumerable のコードは参考になるかなぁ、と思った。
ttp://github.com/evanphx/rubinius/blob/master/kernel/common/enumerable.rb

うーん、微妙。

367 :デフォルトの名無しさん:2009/11/10(火) 19:00:10
>>341
子どもの頃におやじが道楽でAppleII買ったんでその内蔵BASICで遊んだなあ
おやじは死んじゃったけどAppleIIはまだ置いてあるや

368 :デフォルトの名無しさん:2009/11/10(火) 20:51:01
Ruby歴三日の初心者です。
関数呼び出しでかっこつけてますか?
どちらのスタイルで書いた方が良いでしょうか?

369 :デフォルトの名無しさん:2009/11/10(火) 20:54:02
print と puts と p 以外のメソッドはとりあえず括弧をつける
括弧を外すことはいつでもできるのだから、括弧ありで確実な動作を把握するべき

370 :デフォルトの名無しさん:2009/11/10(火) 21:00:32
その三つだけ例外扱いすることに筋が通らなくね?
返値を期待するなら括弧を付けろとか

371 :デフォルトの名無しさん:2009/11/10(火) 21:08:48
?がつくと、あまり括弧を付けたくない気持ちになる

372 :デフォルトの名無しさん:2009/11/10(火) 21:22:39
>>368
かっこいい、かっこ悪いで関数は呼び出すものじゃないと思います

373 :デフォルトの名無しさん:2009/11/10(火) 21:33:27
つまんね

374 :デフォルトの名無しさん:2009/11/10(火) 21:55:01
Railsのソースとか見るとカッコ省略がデフォだよね

375 :デフォルトの名無しさん:2009/11/10(火) 22:13:32
RailsはRubyではない

376 :デフォルトの名無しさん:2009/11/10(火) 22:16:10
RailsはRubyだろ
RubyはRailsではないが

377 :デフォルトの名無しさん:2009/11/10(火) 22:52:49
アホを相手にするな

378 :デフォルトの名無しさん:2009/11/10(火) 23:01:39
rorに成れると、rubyらしく描けなく成るからなw

379 :デフォルトの名無しさん:2009/11/10(火) 23:02:53
Rails は Ruby 1.a.h.o

380 :デフォルトの名無しさん:2009/11/11(水) 09:46:51
Rails慣れてくると、引数はHashじゃなきゃいけなく感じてくる('A`)

381 :デフォルトの名無しさん:2009/11/11(水) 09:57:29
Railsは意図的にDSL的な書き方を要求してるから括弧省略例が多くなるんでしょ。

382 :デフォルトの名無しさん:2009/11/11(水) 10:02:27
括弧ないとき人間がソース読み書きするにあたって
メソッドとプロパティの区別ってどうやって判断するの?

383 :デフォルトの名無しさん:2009/11/11(水) 10:17:42
メソッドのときは::で書けばおk

384 :デフォルトの名無しさん:2009/11/11(水) 10:52:31
>>382
Rubyではそもそもメソッド/プロパティをあまり区別してない

>>383
オブジェクト指向言語で、メソッドを全部::にされるとすごく読みづらいと思う
ほとんどがメソッドの呼び出しだし

385 :デフォルトの名無しさん:2009/11/11(水) 11:19:09
アクセサは?

386 :デフォルトの名無しさん:2009/11/11(水) 11:41:57
rubyって仕様で完全にカプセル化されてるから基本的に全てメソッドじゃないの?
アクセサ定義してもプロパティに直接アクセスできるようになるわけじゃないし。

387 :デフォルトの名無しさん:2009/11/11(水) 22:42:18
というか、オブジェクトを操作するのに、
メソッドとプロパティを意識する必要はあまりないんじゃないの?
という思想があるような気がしないでもない。

388 :デフォルトの名無しさん:2009/11/12(木) 00:01:14
>>368
亀レスだが、引数を省略したりもするので、括弧はできるだけ付けている。
ただし、pなどは可変引数なのと、デバッグでよく使うので括弧を省略。

def func1(p1,p2,p3=0)
p1+p2+p3
end

p func1 2,3,4
p func1(2,3),4

389 :デフォルトの名無しさん:2009/11/12(木) 00:11:51
自分で作ったrbへのパスを変数に入れて、そのrbのメソッドを実行するにはどうしたらいいですか?
path = "lib/hoge.rb" としたあと、hoge.rbのindexメソッドを呼ぶ感じです。

390 :デフォルトの名無しさん:2009/11/12(木) 00:12:54
require

391 :デフォルトの名無しさん:2009/11/12(木) 00:36:21
とりあえず、hoge.rbだけでいいなら、これでいけるんじゃない?
require File.dirname(__FILE__) + "/lib/hoge.rb"

lib以下に複数ファイルがあって全部読み込みたい場合は、
Dir.globと組み合わせればいいかと。

392 :デフォルトの名無しさん:2009/11/12(木) 00:55:05
>390-391
Dir.globを使って任意のパスにある複数のrbをrequireすることはできています。
が、任意のrbの任意のメソッドを呼ぶ方法が分かりません。
#{hoge}.index みたいな感じでしょうか。。

393 :デフォルトの名無しさん:2009/11/12(木) 01:14:20
>>392
そのindexがトップレベルに定義してあるメソッドなら無理

394 :デフォルトの名無しさん:2009/11/12(木) 01:19:57
>>392
うーん。
全部requireした時点でどのファイルか?なんて情報はなくなると思うし、
名前空間で区別すべきじゃないか?

とりあえず、hoge.rbにはこう書いておいて、Hoge.indexで呼び出せばいいんじゃないの?
module Hoge
 def self.index
 end
end

395 :デフォルトの名無しさん:2009/11/12(木) 01:43:50
>>393-394
色々ありがとうございます。
自分がしたいことの実現方法が間違ってる気がしてきました。
やりたいのは、rbを複数個用意して、リクエストuriに対応したrbのメソッドを実行したいんです。
/hoge/huga にリクエストされたら、lib/hoge.rbのhugaメソッド、/hoge/にリクエストされたら lib/hoge.rbのindexメソッド、/foo/barにリクエストされたらlib/foo.rbのbarメソッド、という感じです。
ディスパッチャは自分で作ろうとしています。
リクエストはまず全て一つのrb、例えばroot.rbで受けて、root.rbの中で環境変数などからディスパッチしようとしています。
ので上記のようなことを考えたのですが、もっとスマートな方法はありますか?

396 :デフォルトの名無しさん:2009/11/12(木) 01:49:08
それでいいよ

397 :デフォルトの名無しさん:2009/11/12(木) 01:53:18
車輪の再発明だけどな

398 :デフォルトの名無しさん:2009/11/12(木) 02:07:02
>>388
引数に関数呼び出しのコードを書くのが間違ってる

399 :デフォルトの名無しさん:2009/11/12(木) 02:17:01
>>398
意味不明。正しい用法なるものがあるんなら、コードの具体例を。

400 :デフォルトの名無しさん:2009/11/12(木) 02:18:07
>>395
require毎にインスタンスを作っておく、じゃNGか?

401 :デフォルトの名無しさん:2009/11/12(木) 08:11:03
>>398
他の言語だとコード簡略化の為によくある手法だが
Rubyは御法度なのか、勉強になった。

402 :デフォルトの名無しさん:2009/11/12(木) 08:38:52
引数の呼び出し順番は処理系によって不定とかいう言語から来た人かと思った。
Rubyは決まってるよな?

403 :デフォルトの名無しさん:2009/11/12(木) 08:41:00
どなたか、:: と . の違いについてのコピペをキボンヌしてくださる方はいらっしゃいませんか?

モジュール定数指定する時に、
Hoge.MAGE じゃだめなんだけど・・・

つか、テンプレに入れとけ・・・

404 :デフォルトの名無しさん:2009/11/12(木) 08:43:50
>>402
Rubyの場合は、実装が仕様です。

>>403
じゃあ、キボンヌ

405 :デフォルトの名無しさん:2009/11/12(木) 08:46:55
>>403
class::method
instance.method

406 :デフォルトの名無しさん:2009/11/12(木) 09:03:14
>>401
398の主張の理由はわからんけど、別にRubyでも御法度ではないよ
むしろ積極的に使われてるぐらいのはず

407 :デフォルトの名無しさん:2009/11/12(木) 09:04:55
>>403
定数やモジュール、クラスを指定するなら Foo::Constant
メソッドを呼び出すなら instance.method

たまに Foo::method という記述も見かけるが、あまり一般的ではない

408 :デフォルトの名無しさん:2009/11/12(木) 09:15:57
>>403
ttp://doc.okkez.net/static/187/doc/spec=2fcall.html
ttp://doc.okkez.net/static/187/doc/spec=2fvariables.html#const

409 :デフォルトの名無しさん:2009/11/12(木) 10:04:04
C言語のmax関数をRubyで書くとどうなりますか?

a = max 0, a-1

が通りません。


410 :デフォルトの名無しさん:2009/11/12(木) 10:31:56
関数のポインタ呼び出しはできますか?

411 :デフォルトの名無しさん:2009/11/12(木) 10:52:00
>>409
Enumerable#max

>>410
関数ポインタなんて無いから下から好きなの選べ
Object#method
Object#send
Kernel#proc Kernel#lambda Proc

412 :デフォルトの名無しさん:2009/11/12(木) 11:05:47
あんまりないけど、レシーバが確定していないなら
Module#instance_methodしておいて後からUnboundMethod#bindというのもあるね

413 :デフォルトの名無しさん:2009/11/12(木) 15:13:22
>>409
411の回答に優しさを感じなかったから回答してみると、
a = [0, a-1].max

414 :デフォルトの名無しさん:2009/11/12(木) 18:33:57
ret = `cmd`
で終了コードも知りたい場合どうやればいいですか?

415 :デフォルトの名無しさん:2009/11/12(木) 18:45:33
$?

416 :デフォルトの名無しさん:2009/11/12(木) 23:57:30
erbかhamlを、railsを使わずに素のrubyから使った場合に、layout機能を使うにはどうしたらいいですか?

417 :デフォルトの名無しさん:2009/11/13(金) 00:20:28
layoutはRailsの機能なんだが。


418 :デフォルトの名無しさん:2009/11/13(金) 00:22:02
>>417
どおりでいくらググっても情報が得られないわけですね…失礼しました。

419 :デフォルトの名無しさん:2009/11/13(金) 00:28:33
>>416
erb(レイアウト)の中でerbを使う
<%= inner_erb.result %>

420 :デフォルトの名無しさん:2009/11/13(金) 01:17:56
>>419
なるほど!しかし、こうなります。

hoge
<%= inner_erb.result %>
huga

これが

inner_erbのresult
huga

何か、<%= inner_erb.result %>より上の部分が消えます。

421 :デフォルトの名無しさん:2009/11/13(金) 01:28:24
>>420
ttp://www.ruby-lang.org/ja/man/html/erb.html#ERB.2enew

422 :デフォルトの名無しさん:2009/11/13(金) 01:32:29
EBBオブジェクトの src メンバーを参照するとわかるが、
変数 _erbout を空文字列で初期化し、
元テキストを地の部分とスクリプト部分に分けたものを、
* 地の文ならconcat
* <% %> ならそれを評価
* <%= %> なら評価結果を to_s してconcat
していく。

デフォルトだと常に _erbout って名前の変数を使ってしまうから、
innerの処理結果が _erbout というローカル変数に代入されてしまい、
それまでの結果が上書きされてしまう。

<%
inner_erb = ERB.new(File.read('inner.erb'), nil, nil, '_inner_out')
%>
hoge
<%= inner_erb.result %>
huga


423 :デフォルトの名無しさん:2009/11/13(金) 01:53:08
>>421
えーと…
>>422
やりたい事ができました、ありがとうございました。

それにしても、絶対必要だと思うんですが、何でlayout機能が標準装備されてないんでしょうかね。

424 :デフォルトの名無しさん:2009/11/13(金) 06:36:10
rubyだから

425 :デフォルトの名無しさん:2009/11/13(金) 06:37:12
>>423
おまえのためだけにRubyがあるんじゃねぇんだょ!

426 :デフォルトの名無しさん:2009/11/14(土) 04:13:56
>>423
rcsは何でプロジェクトのファイル全部を統括的にバージョン管理できないんでしょうかね、と言うようなものかと
svn使え、と。つまり、もっと上のものを使わないと。
この場合だと何らかのフレームワーク使えってことじゃないかな。
てか、RailsのActionViewってActiveRecordみたいに単体でつかえたっけ?

427 :デフォルトの名無しさん:2009/11/14(土) 04:53:51
そうね誕生石ならRubyなの
そんな言葉が頭に渦巻くよ

428 :デフォルトの名無しさん:2009/11/14(土) 05:21:22
今年もレコ大(死語)の季節だな

429 :デフォルトの名無しさん:2009/11/14(土) 05:45:49
puts 'hello'[0]
=> 104

この仕様が理解できませぬ。いや文字コードが出力されているという事実は理解できるんだけど
hを返さずに104を返すのは何故なのでしょう。
ruby熟練者にとっては、文字コードが返された方が都合いいのですか?

430 :デフォルトの名無しさん:2009/11/14(土) 07:12:11
1.9では文字列を返すように仕様が変わるという厄介者。
[0]ではなく[0,1]を使うようにするのがよいでしょうね

431 :429:2009/11/14(土) 09:39:54
>>430
ありがとうございます。[0,1]でhが取り出せました。
1.9から変わったということはあまり意味の無い仕様だったのかな…早く1.9に乗り換えないとなぁ

432 :デフォルトの名無しさん:2009/11/14(土) 10:03:51
ゴルファーは ?d で 100 が得られなくなって嘆いているらしいな。


433 :デフォルトの名無しさん:2009/11/14(土) 10:05:25
部分文字列が整数なのはCから来てるんだろ
誤解は多いけど、意味のない仕様というわけでもない。

批判が多くて1.9で変わった仕様としては
i = 2; 10.times do |i| puts i end;
puts i # => 9
なんてもあるけど、これもCから来てる。

434 :デフォルトの名無しさん:2009/11/14(土) 10:13:27
整数で取り出せたとして使う機会が思い浮かばない

435 :デフォルトの名無しさん:2009/11/14(土) 10:17:07
>>433
なんでそれで i が変化すんの?

436 :デフォルトの名無しさん:2009/11/14(土) 10:17:49
Cの仕様で部分文字列は整数ってなるようなのあったっけ?

437 :デフォルトの名無しさん:2009/11/14(土) 10:17:53
>>433
ああ、そういうことか、
stringからcharを取り出す感覚か。

438 :デフォルトの名無しさん:2009/11/14(土) 10:19:44
>>434-435
あほだな

439 :デフォルトの名無しさん:2009/11/14(土) 10:27:01
>>435
ブロックの引数は、実は引数じゃなくて、左辺値のある式ならなんでもよかった。
で、その左辺値に代入しちゃうわけ。

Cから来てる、という説明はあまり見ない気がするが...

for (int i = 0; ...
みたいなJavaなどではできる記述がCではできないことを言いたいのか?

440 :デフォルトの名無しさん:2009/11/14(土) 10:27:36
stringってchar配列でしょ?それとはまた違うような

441 :デフォルトの名無しさん:2009/11/14(土) 10:31:23
>Cから来てる、という説明はあまり見ない気がするが...
>for (int i = 0; ...
>みたいなJavaなどではできる記述がCではできないことを言いたいのか?

いやC++ならできるけど
スコープが外とつながってるっつー話で

442 :デフォルトの名無しさん:2009/11/14(土) 11:03:46
Linuxでrubyを利用しています。
LinuxだけでMS-ACESSのmdb形式のデータベースを利用する方法がありますか?



443 :デフォルトの名無しさん:2009/11/14(土) 11:06:45
>>436
Cの文字列は文字コードの配列だから、当然1文字取り出したら文字コード=整数だよ

444 :デフォルトの名無しさん:2009/11/14(土) 11:09:30
charだから整数では無いな
利用するときに暗黙のキャストでintとみなされたときに始めて整数になる

445 :デフォルトの名無しさん:2009/11/14(土) 11:11:17
>>442
OOo経由すれば

446 :デフォルトの名無しさん:2009/11/14(土) 11:41:27
charは8bit整数、intは16〜32bit整数じゃないの?

447 :デフォルトの名無しさん:2009/11/14(土) 12:07:07
CHAR_BITが8でなければならないという話はどこにもないし、
intが64ビットではいけないという話もどこにもない。

448 :デフォルトの名無しさん:2009/11/14(土) 12:09:25
rubyで一文字取ったとき符号無し整数になるの?それとも符号付き?

449 :デフォルトの名無しさん:2009/11/14(土) 12:27:45
(古いRubyで)"\xff"[0] が -1 になるか 255 になるか、ってこと?

450 :デフォルトの名無しさん:2009/11/14(土) 13:31:11
"あ"[0] でもいいのかな

451 :デフォルトの名無しさん:2009/11/14(土) 13:50:23
string.c の該当行は、

return INT2FIX(RSTRING(str)->ptr[idx] & 0xff);

だから、マイナスの値にはならない。

452 :デフォルトの名無しさん:2009/11/14(土) 16:12:00
Cではcharは1バイト。他は実装依存。
1バイトが何ビットかは実装依存。

ただし、stdintを使えばちゃんと指定できる。

453 :デフォルトの名無しさん:2009/11/14(土) 16:35:30
RSpec を gems でインストールしようとしておかしなことになって困ってます。
どなたか助けてください _o_

# gem install rspec

を実行すると、依存ライブラリのインストールを確認してくるので
全部 y またはそのままリターン で進めていたのですが、
そのうち以下のように、cucumber と rspec の確認を繰り返すだけに
なってしまいました。

Install required dependency cucumber? [Yn]
Install required dependency rspec? [Yn]
Install required dependency cucumber? [Yn]
Install required dependency rspec? [Yn]
Install required dependency cucumber? [Yn]
(以下、何度繰り返しても変化なし)

rubyforge から gemsファイルをダウンロードして内容を調べたところ、

・rspec は cucumber に依存している
・cucumber は rspec に依存している

ことが分かりました。

依存関係がループしているわけですが、
gems ではこういうときにどうすれば良いのでしょうか?


454 :デフォルトの名無しさん:2009/11/14(土) 16:41:56
とりあえずそこで止めて、
# gem install rspec cucumber
するとどうなる?

455 :453:2009/11/14(土) 16:43:39
>>454 ありがとうございます。

やってみましたが、以下同文でした。


456 :デフォルトの名無しさん:2009/11/14(土) 17:06:24
たがいに依存してるなら統合しておけよwって感じだな

457 :デフォルトの名無しさん:2009/11/14(土) 17:50:44
ルヴィーって楽しいですか?
友達が日本人が開発者だから誇らしいと言ってましたが。
僕もルヴィーやってみたいです。

458 :デフォルトの名無しさん:2009/11/14(土) 18:12:30
楽しいには楽しい。
でも開発者が日本人っつーなら、なでしことかひまわりとか(ry

459 :デフォルトの名無しさん:2009/11/14(土) 18:15:27
>>453
-ignore-dependencies やっちまえ
責任もてないけどねw


460 :453:2009/11/14(土) 21:25:21
>>453 です。

--ignore-dependencies とか、rubygems のバージョンが古かったので
バージョンアップとか、いろいろやってみたのですが、

状況がごちゃごちゃになって良く分からなくなってので、全リセットしてみました。

rubygems を完全にアンインストール、これまでインストールした gems も
全て削除してから、rubygems の最新版(1.3.5)をインストールして、

# gem install rspec

と実行したら、rspec だけがインストールされ、依存gemsがインストールされません。

何だか訳の分からない状況になってきたので、一から調べなおしてみます。
お騒がせしました。


461 :453:2009/11/15(日) 01:05:32
なんとかインストールできましたので、結果を報告しておきます。

まず、最初に使っていたrubygemsは、Ubuntu8.04のパッケージにあった 0.9.4 でした。
次に使ったのは 1.3.5 でしたが、この間に --development オプションが
追加されたみたいです。

これは、依存関係に runtime/development 属性があり、
通常のinstall/update では runtime 依存のみ追加し、
--development オプションを指定すると development 依存も追加する、
というものみたいです。

rspec → cucumber の依存関係は development で、
cucumber → rspec の依存関係は runtime でした。

また、rspec の依存関係は全て development だったので、

$ gem install rspec
とだけすると依存パッケージはインストールされず、

$ gem install rspec --development
とする必要がありました。しかも、このとき cucumber の依存関係のせいか
rspec のインストールは失敗し、

$ gem install cucumber
としてから、あらためて rspec をインストールしたら今度は成功しました。
example の 〜_spec.rb を試してもOKだったので、これで大丈夫だと思います。

以上、お騒がせしました。


462 :デフォルトの名無しさん:2009/11/15(日) 02:46:32
railsが提供するlink_toやyears_agoは、railsを使わないでも使えますか?
ググったらARはrails抜きで使う方法が見つかりましたが、これらは見つかりません。

463 :デフォルトの名無しさん:2009/11/15(日) 04:37:36
>>461
developmentな依存関係は、対象gem自体の開発を行う場合に必要と
されるものだねぇ。



464 :デフォルトの名無しさん:2009/11/15(日) 04:56:41
>>462
years_ago はActiveSupportがあれば使える。
# require 'rubygems'
require 'activesupport'

link_toはコントローラオブジェクト(ActionController::Base)のurl_for
が必要なのでかなり面倒になると思う。


465 :デフォルトの名無しさん:2009/11/15(日) 06:59:56
rails無しでlink_toを使うって状況が思い浮かばないんだけど。
ルート規約とかも取り込むってこと?

466 :デフォルトの名無しさん:2009/11/15(日) 08:30:12
link_toてルーティング絡んでいるurl_forとか呼び出しているような。分離すんの難しくネ?

467 :453:2009/11/15(日) 09:58:50
>>463
そうなんですか?
rspec は、develop依存ライブラリが無いと普通に実行することすら
できませんでしたが。

rspec のパッケージングがちょっとヘン、てことでしょうか。


468 :デフォルトの名無しさん:2009/11/15(日) 13:38:51
Ruby 1.8.7 Rails2.34 で
ビュー内に書いた
<%= time.now.strftime "%y年%m月%d日" %>
が処理されずにそのまま表示されます。なぜですか?

469 :デフォルトの名無しさん:2009/11/15(日) 13:59:04
処理以前にtimeじゃエラーになると思うんだが。
再現手順よろ。


470 :デフォルトの名無しさん:2009/11/15(日) 14:15:57
コマンドプロンプトでプロジェクト、コントローラ作成後、
layoutsの中にindex.html.erb作成、
<%= time.now.strftime "%y年%m月%d日" %>
を記述、webrickサーバを起動してIEで
http://localhost:3000/ex3/indexにアクセスすると
time.now.strftime "%y?N%m??%d??
と表示されます。その後参考書に書いてあるとおり
<% for i in 1..10 %>
<%= i%>
<% end %>
と書くとエラーになります。

471 :デフォルトの名無しさん:2009/11/15(日) 14:20:54
layouts ではなく app\views/ex3を作って、そのの中にindex.html.erb作成でした。

472 :デフォルトの名無しさん:2009/11/15(日) 14:32:01
こっちじゃ、

time だと、undefined local variable or method `time'
Time だと、09年11月15日
と出るなあ。

文字コード系の問題かと思って index.html.erb を Shift_JIS で保存し
たら化けてるけど日付出てきたし。

なんでだろうね。


473 :デフォルトの名無しさん:2009/11/15(日) 15:13:11
>>470
まず、scaffoldして何も手を加えない状態でちゃんと動くか確認シル

474 :デフォルトの名無しさん:2009/11/16(月) 00:17:49
>>470
ERBで正しくコンパイルできているかを確認してみよう。

erb -x index.html.erb | less

これで <%= time.now.strftime .... %> のところがどうなっているか確かめてみて。

475 :デフォルトの名無しさん:2009/11/16(月) 19:01:25
このページ ttp://d.hatena.ne.jp/mingos/20080512/1216099482 の中段
「当たり前だけど、こんなのはNG(よく間違うけど)。」

確かに試してみるとだめなんですが、なぜだめなんでしょうか?

どうもブロックスコープ内ではインスタンス変数が見えないようなのですが...
なぜローカルに代入すれば良いのか?

教えてください

476 :デフォルトの名無しさん:2009/11/16(月) 19:49:25
コンテキストというbindingというか、その辺の問題
ブロックの中と外でp selfしてみるとわかるんじゃないかな

477 :デフォルトの名無しさん:2009/11/16(月) 21:51:57
binding に関してある程度詳しいページはないですか?

公式見てもさっぱりで
ttp://www.ruby-lang.org/ja/man/html/Binding.html

他も情報も少なく
エキスパート名皆さんはいったいどこで情報を得るのですか?

478 :デフォルトの名無しさん:2009/11/16(月) 21:55:15
Windowsでruby使うには、どれ使うのが良いんですか?
色々載っていて、どれがよいのかわからんです。one click rubyとかがいいんですかね


479 :デフォルトの名無しさん:2009/11/16(月) 23:00:05
>>477
コンテキストというプログラミング一般の用語について勉強してくれ
理解できる頃にはbindingも自然とわかるようになる


480 :デフォルトの名無しさん:2009/11/16(月) 23:03:12
>>478
自分で理解しながらやりたいか、手っ取り早く全部入れたいかによって違う

481 :デフォルトの名無しさん:2009/11/17(火) 00:10:37
>>479
プログラム自体に対するかかわりは長いから、一般的なコンテキストの
概念は理解しているつもりだけど

selfが何を指しているかは別として、関数スコープの変数にはアクセスできて
インスタンス変数が見えないのは言語の仕様なんだと思うんで、その辺を
説明した資料は無いですか?

482 :デフォルトの名無しさん:2009/11/17(火) 00:21:08
>>481
インスタンス変数は普通に見えてると思うんだが
何をもって「見えない」としているの?

483 :デフォルトの名無しさん:2009/11/17(火) 01:14:35
class Hoge
attr_accessor :quality
・・・
def save
p @quality #=> 80
image.write(save_path) {
p @quality #=> nil
# self.quality = @quality
}
end
end
となる為です

10.times{|t| p @quality} #=> 80
となるので、この差もよく分からない

484 :デフォルトの名無しさん:2009/11/17(火) 01:28:39
バージョンの数で奇数は開発版、偶数は安定版
でももう数がないから1.9.1から安定版 って話みたいだけど
1.10.0とかにはしないものなの?

485 :デフォルトの名無しさん:2009/11/17(火) 01:43:13
>>481
selfというコンテキストが変わってるんだからそれに属するインスタンス変数も別物になる

class C
 def initialize(str)
  @str = str
 end
 def bind
  binding
 end
end

eval("p @str", C.new("foo").bind)
eval("p @str", C.new("bar").bind)

ブロックにbinding与えるのはrubyスクリプトからはできなかったと思うからevalで勘弁して

486 :デフォルトの名無しさん:2009/11/17(火) 01:49:40
>>483
それはかなり特殊なケースだよ

saveの中では、普通は「self = Hogeクラスのオブジェクト」だけど
image.write{〜}の中に限り、「self = image」となってる
writeの中での @quality がnilになってるのはそのため
(なんでselfが変わるの?という点が疑問なら、Object#instance_eval の説明を読んでみて)

しかしこれ、どうやって初心者向けに説明したらいいんだろう……
分かりやすく説明できそうな人誰かお願いします

487 :デフォルトの名無しさん:2009/11/17(火) 01:51:45
ああ、コンテキスト変わってるのになぜ静的スコープが有効かということか
・・・なんでだろうw

488 :デフォルトの名無しさん:2009/11/17(火) 11:40:08
>>484
しないと太古の昔に約束されてしまった。

489 :デフォルトの名無しさん:2009/11/17(火) 15:00:39
バイト募集中です。内容は宿題の代行(提出課題の代行)です。
Rubyのプログラミング課題で、内容は初心者用なので比較的優しいと思われます。
拘束期間は12/15迄、課題数は4回で、問題数は一回につき一題。計4題です。
謝礼金は5000円〜 の予定です。
人助けだと思って、どうかよろしくお願いします。

連絡先:white_knight2あっとまーくlivedoor.com


490 :デフォルトの名無しさん:2009/11/17(火) 15:04:47
詐欺乙

491 :489:2009/11/17(火) 15:09:49
スレ汚しすいませんでした。

492 :デフォルトの名無しさん:2009/11/17(火) 15:19:15
なぜ初心者スレに書いたのか

493 :デフォルトの名無しさん:2009/11/17(火) 15:59:41
宿題スレだと講義にない高度テクニックをこっそり混ぜられてバレるだろ

494 :デフォルトの名無しさん:2009/11/17(火) 16:02:16
そういういやらしい遊びがあるのか
漏れもやってみようw

495 :デフォルトの名無しさん:2009/11/17(火) 16:36:16
まずCで拡張ライブラリを書くんですね、分かります

496 :デフォルトの名無しさん:2009/11/17(火) 19:11:45
わざとまわりくどい書き方したり
バグを埋め込んだり
答える側も色々大変なんだぞ

497 :デフォルトの名無しさん:2009/11/17(火) 23:41:35
そうそう goruby 使ったりな

498 :デフォルトの名無しさん:2009/11/18(水) 00:10:28
ゴルバチョフ?

499 :デフォルトの名無しさん:2009/11/18(水) 03:08:21
>>489の宿題は
http://blog.livedoor.jp/white_knight2/
ここで公開されますよwwwww

500 :デフォルトの名無しさん:2009/11/18(水) 05:21:43
def hoge01
hoge02
end
def hoge02
end

これがエラーになって

def hoge02
end
def hoge01
hoge02
end
これなら実行できるのですが、
hoge02のように同じファイル内からアクセスされるメソッドは最初に書かなければならないのですか?

Javaなんかだと同じクラス内でのみ使うprivateメソッドは最後に書くのが普通だと思うのですが。

501 :デフォルトの名無しさん:2009/11/18(水) 06:21:35
> これがエラーになって
なんてエラー?こっちでは普通に動いた

502 :500:2009/11/18(水) 06:30:30
すいません、間違えました。
エラーになるのは、
hoge02
def hoge01
hoge02
end
このケースでした。

503 :デフォルトの名無しさん:2009/11/18(水) 07:34:32
実際のメソッド呼び出しは、その時点で定義済みじゃないと呼べるはず無いでしょ。
メソッド定義内のメソッド呼び出しは、メソッドを呼ぶという情報を与えるだけだからその時点で未定義でもいいのだろう。

504 :デフォルトの名無しさん:2009/11/18(水) 07:35:35
って自分でも何いってんのかよく分からん。

505 :デフォルトの名無しさん:2009/11/18(水) 07:42:00
Rubyスクリプトは上から順に実行(評価)される。defといえども。

506 :デフォルトの名無しさん:2009/11/18(水) 07:45:20
Rubyは他と違って前方参照できないめんどくさい言語

507 :デフォルトの名無しさん:2009/11/18(水) 08:20:03
def だけ最初に取り出されて事前構築されるという考え方もある
静的言語のコンパイルだね

Ruby はスクリプト実行中にdef を自分で書いて定義することもできるから、
def は書かれた順番に順に定義される

処理行1
処理行2

関数定義A…
関数定義B…
関数定義C…

という書き方ができない「頭でっかち」なのが一番最初はキモかったことを覚えている

508 :デフォルトの名無しさん:2009/11/18(水) 08:41:40
最終的に他で言うmain関数はべた書きの部分だからねえ

509 :デフォルトの名無しさん:2009/11/18(水) 09:07:51
実行時に未定義のメソッドや変数を参照出来るインタプリタ言語があるのか

510 :デフォルトの名無しさん:2009/11/18(水) 09:13:57
ぱーるはこれで hello と出る。

&doit;
sub doit { print "hello¥n"; }

511 :デフォルトの名無しさん:2009/11/18(水) 09:21:40
ぱーるいいな
Rubyでやりたいならdef main〜endに処理入れてコード末尾でmain呼び出せば

512 :デフォルトの名無しさん:2009/11/18(水) 09:26:24
>>509
本当の実行時に未定義があればどんな言語でもエラーだろう
RubyでだってNameErrorとか出る

で、まあ、ソース読み込み時に定義が読めなくても
実行時に解決可能ならOKという言語は多いと思うぞ

513 :デフォルトの名無しさん:2009/11/18(水) 09:31:23
あーperlは実行時にコンパイルするんだったっけか
YARVとやらが使えるようになったらrubyでもできるようになるのかな

514 :デフォルトの名無しさん:2009/11/18(水) 09:57:47
> YARVとやらが使えるようになったら

そうかここは初心者スレだった

515 :デフォルトの名無しさん:2009/11/18(水) 10:20:32
ルヴィーって面白いですか!??
開発者が日本人だから誇らしいって友達がいってました。

516 :デフォルトの名無しさん:2009/11/18(水) 10:33:05
>>507
最初に関数定義群があるとキモチ悪いのはあれなんでだろうね

517 :デフォルトの名無しさん:2009/11/18(水) 11:42:06
クラスのメンバー関数を呼ぶときにselfってつけるべきですか


518 :デフォルトの名無しさん:2009/11/18(水) 11:47:34
上げんなカス

519 :デフォルトの名無しさん:2009/11/18(水) 12:03:21
メンバー関数ってなんですかカス

520 :デフォルトの名無しさん:2009/11/18(水) 12:11:22
インスタンスメソッドを意味もなくselfつきで呼んでる例なんてないだろむしろ晒せカス

521 :デフォルトの名無しさん:2009/11/18(水) 12:12:33
RubyからRailsを取ったら何が残るの?ねぇ

522 :デフォルトの名無しさん:2009/11/18(水) 12:17:27
>>521
Rubyが残ります
RailsがなくてもベターPerlでグルー言語でプログラマの友でOOP初心者向け言語として普通に活躍していくでしょう

仕事として年俸1千万とか欲しいなら、そりゃJavaをやればいいのさ

523 :デフォルトの名無しさん:2009/11/18(水) 12:19:06
マジレスすんなカス

524 :517:2009/11/18(水) 12:22:09
なぜフルボッコ.......
普通 self つけるでしょ???

525 :デフォルトの名無しさん:2009/11/18(水) 12:25:20
selfを付ける根拠を述べよ

526 :デフォルトの名無しさん:2009/11/18(水) 12:44:29
Rails で拡張されすぎて便利なもんだから
素の Ruby を知らないひとが出てきてるね
本気で Rails を Ruby だと思っていそう

527 :デフォルトの名無しさん:2009/11/18(水) 12:45:45
>>524
ここはRubyスレです
Pythonスレにお帰り下さい

528 :デフォルトの名無しさん:2009/11/18(水) 12:49:27
ローカル変数と区別付けたいってことかな?
でもself付けるとprivateメソッド呼べないから、スタイルを統一するのは無理。

class MyClass

def meth1
self.meth2
end

private
def meth2
puts 'hello'
end
end

myclass = MyClass.new
myclass.meth1

これがエラーになる不思議。

529 :デフォルトの名無しさん:2009/11/18(水) 12:51:12
>>528
レシーバつきで呼んだらエラー出してねと宣言しておきながらレシーバつきで呼ぶとは何事か

530 :517:2009/11/18(水) 12:55:46
selfつけといた方が自分のメンバー関数を呼んでる感が強くて気に入っていたのですが
なんかつけるなと言う意見の方が多いのでつけないことにします。
俺は少数派だったのか

531 :デフォルトの名無しさん:2009/11/18(水) 12:58:08
>>529
それはprivateの意義よりRubyの仕様が先にありきの考え方。
privateのそもそもの意味を考えれば上のコードでエラーを出すのはおかしいでしょ。
だってselfを付けても省いても意味は変わらないんだもの。
実際上のコードのselfを消せばエラーにならないわけだが、内部ではmeth2を呼ぶために結局selfを付けてる。

532 :デフォルトの名無しさん:2009/11/18(水) 13:00:02
>>531
どうして他の言語の動作を持ち込むの?

533 :デフォルトの名無しさん:2009/11/18(水) 13:02:51
>>531
それはおまえさんの理想や狭い常識のprivateありきの考え方だな

534 :デフォルトの名無しさん:2009/11/18(水) 13:03:54
その辺の仕様が糞なのは皆承知してます
1.9でちょいちょい変えようとしてたんだけど、1.9の方針が変わってしまい、なかったことに

535 :デフォルトの名無しさん:2009/11/18(水) 13:07:04
変なのは確かだが、違うと言われても困るよな

536 :デフォルトの名無しさん:2009/11/18(水) 13:14:21
>>534
そうだったのか。知らなかった

537 :デフォルトの名無しさん:2009/11/18(水) 13:16:48
そもそもユーザーレベルでクラス再オープン可能な言語にprivateとか無意味

538 :デフォルトの名無しさん:2009/11/18(水) 13:16:50
こまけぇこたぁいいんだよ

539 :デフォルトの名無しさん:2009/11/18(水) 13:21:19
protectedはさらに摩訶不思議

540 :デフォルトの名無しさん:2009/11/18(水) 13:25:19
全部所謂publicという超便利かつ超危なっかしい言語でいいと思うんだ

541 :デフォルトの名無しさん:2009/11/18(水) 13:27:59
このへんの話題はこっちではどうしようもないくせに揉めるから嫌

542 :デフォルトの名無しさん:2009/11/18(水) 13:33:15
いまさらprivateとかそんな根本的な仕様変えられたら逆に困るんだが。

543 :デフォルトの名無しさん:2009/11/18(水) 13:34:30
みんなそんなに有効活用してないから大丈夫

544 :デフォルトの名無しさん:2009/11/18(水) 13:35:24
>>540
ですよね。呼んではいけない関数を呼ぶプログラマーが悪い。


545 :デフォルトの名無しさん:2009/11/18(水) 13:37:13
privateでよかったと思ったことなんてまず無い
たいていは舌打ちして強制的に呼ぶ

546 :デフォルトの名無しさん:2009/11/18(水) 13:38:19
モダンPerlの世界へようこそ
第20回 Email::Sender:メールを送信する|gihyo.jp … 技術評論社
ttp://gihyo.jp/dev/serial/01/modern-perl/0020?page=1

この Email::Sender は日本語大丈夫なのかな。
メールの解説記事って添付や From: の日本語のことを書かないよね。

547 :546:2009/11/18(水) 13:39:00
すまん。誤爆した。

548 :デフォルトの名無しさん:2009/11/18(水) 22:26:12
>>547
かわいい

549 :デフォルトの名無しさん:2009/11/19(木) 14:06:09
あいうえお
かきくけこ
さしすせそ
さしすせそ
たちつてと

といった感じの文章を表示させるときに、
"さしすせそ"の文を1行消して表示させるにはどうすればいいですか?
よろしくお願いします。

550 :デフォルトの名無しさん:2009/11/19(木) 14:27:03
元のデータがどう格納されてるかに依存するよなあ
初心者ぽいと言えば初心者ぽいのだが

並び替えの機能が作られているまたは標準のArray#sortで望み通りだという場合には、
(行ごとに区切って配列にして)Array#uniq する

str = "あいうえお
かきくけこ
さしすせそ
さしすせそ
たちつてと"

arr = str.split(/\n/) # または str.split(/\r\n/)
puts arr.uniq.sort

あいうえおが例示であって、「1行」ごとに配列にしてsortしても思い通りの表示にならんという場合は
sort のブロック自力で書かんといかんな

551 :デフォルトの名無しさん:2009/11/19(木) 15:50:13
質問力が低すぎる

552 :デフォルトの名無しさん:2009/11/19(木) 16:09:01
ある程度慣れてくると質問の仕方ってのも分かるんだろうけど、
完全に初心者だとどういう情報を出したら良いのか分からないんじゃないの。
だから質問力が低いってなるんだろうけど、ここは初心者スレだよー

553 :デフォルトの名無しさん:2009/11/19(木) 21:13:30
メソッド呼び出しに、メソッド名の入った変数を使うことはできませんか?クラスが複数のメソッドを持っていて、どのメソッドを呼ぶか、動的に変えたいのです。やりたいことは以下のようなことです。

class Hoge
def echo_hoge
puts "hoge"
end
end

h = Hoge.new
str = "echo_hoge"
h."#{str}" # エラー

554 :デフォルトの名無しさん:2009/11/19(木) 21:24:41
通常はあまり推奨しない特に初心者
どーしても必要だという場合

h.__send__(str)

でオブジェクト h の str という名前のメソッドが引数なしで呼ばれる

h.__send__(str, param)

でいわゆる h.str(param) になる

555 :デフォルトの名無しさん:2009/11/19(木) 21:26:28
俺も初心者だけど、

h.send(str)

でどうかな?

556 :デフォルトの名無しさん:2009/11/19(木) 21:53:46
>>554-555
ありがとうございました。出来ました。

使う状況ですが、例えばHumanクラスがname age sexのアクセサを持っていたとして、そのうちどれかの値を欲しいとします。
そんなときはどのアクセサが欲しいかが動的に決まると思うのですが、そんなときに human.__send__(str) で取得しようとしました。
これはおかしな考えでしょうか?

557 :デフォルトの名無しさん:2009/11/19(木) 21:58:41
知らねーよ

558 :デフォルトの名無しさん:2009/11/19(木) 21:59:49
「そのうちどれかの値を欲しい」ってどういう状況かわかんないな
どうしてもそうなったら自分ならHash使う

559 :デフォルトの名無しさん:2009/11/19(木) 22:07:30
メソッド名を外部から入力させてそのまま使うということが普通はないと思う

def get_value_from(who, key)
case key
when 'name' then who.name
when 'age' then who.age
when 'sex' then who.sex
else raise ArgumentError, "Unknown parameter: #{key.inspect}"
end
end

human = Human.new
register_data(human)

puts "名前は #{get_value_from(human, 'name')} です"

560 :デフォルトの名無しさん:2009/11/19(木) 22:17:52
>>559
なるほど、受け取った文字列をメソッド名に使うんじゃなくて、そうやって分岐すればいいんですね。
勉強になりました、ありがとうございます。

でも、アクセサが増えるたびにwhenに追記するのは面倒じゃないですか?

561 :デフォルトの名無しさん:2009/11/19(木) 22:20:23
単なるデータならStruct使えばHash風にhuman[str]でアクセスできる

メソッドがくっついてるなら>>559みたいにやったほうがいい
もしくは対応テーブル作るかなぁ
table = { "name" => :name }
human.__send__(table[str])

変なことすれば自分が困るだけみたいな手抜きスクリプトなら
そのまま__send__しちゃうこともあるけどねw

562 :デフォルトの名無しさん:2009/11/19(木) 22:20:50
まあ、>>559のようなものなら>558のいうように内部ではHash
で持っておけば済むところだね。



563 :デフォルトの名無しさん:2009/11/19(木) 23:51:20
>>561-562
ありがとうございました。

564 :デフォルトの名無しさん:2009/11/20(金) 00:06:44
Stringの継承なんですが
class FOO < String
def get
self
end
def put(arg)
self = arg
end
end

foo = FOO.new
foo.put("aaa")
p foo
>ruby test.rb
test.rb:6: Can't change the value of self
self = arg
^
となってしまってselfを変更しようとすると怒られてしまうのですが
どうしたら変更できますか?

565 :デフォルトの名無しさん:2009/11/20(金) 00:11:30
>>564
String#replace

566 :564:2009/11/20(金) 00:17:46
>>565
即レスthx
String#replaceで望んだ動作です

#=の動作が変わっているのは何故なんだろう・・・(´-`)

567 :デフォルトの名無しさん:2009/11/20(金) 00:54:37
代入の=ってこれもどっかのクラスのメソッドなの?

568 :デフォルトの名無しさん:2009/11/20(金) 01:04:56
selfを変更するって発想がまずおかしい気がするが

569 :デフォルトの名無しさん:2009/11/20(金) 01:33:44
初心者ですいませんが質問させてください。

HP-UXでPostgreSQLとの連携のためにライブラリを入れたいのですが
どうしてもエラーしてしまいます。

OS : HP-UX 11iv2
Ruby : 1.8.7
PostgreSQL : 8.3
ライブラリ : pg-0.8.0

gemにてpg-0.8.0.gemをinstallすると下記のエラーが表示され
インストールできません。

mkmf.rb:345:in `%': numbered(1) after unnumbered(1) (ArgumentError)

ライブラリのパスがうまく認識していない?ようなのですが、
gemの起動時に--with-pg-lib, --with-pg-includeは指定しています。

何か原因として考えられるものがあればご教授ください。

よろしくお願いします。

570 :デフォルトの名無しさん:2009/11/20(金) 07:44:43
>>569
>mkmf.rb:345:in `%': numbered(1) after unnumbered(1) (ArgumentError)

このエラーでぐぐると、まさにHP-UXでエラーが発生したというレポートがある。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/322136
で、すでに修正されたとあるんだけど。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/322143
2008年の時点で修正されたはずだから、もし再現するなら、本家メーリングリストで聞いたほうがいいと思う。

571 :デフォルトの名無しさん:2009/11/20(金) 07:47:02
>>569
>Ruby : 1.8.7
詳しいバージョン番号は?最新版は1.8.7-p174だから、もし古いのを使っているなら新しいのを使ってみるといいかもね。

572 :デフォルトの名無しさん:2009/11/20(金) 09:42:03
>>567
代入自体はメソッドではない。
が、メソッド呼び出しになる代入(のように見える操作)はある。

573 :デフォルトの名無しさん:2009/11/20(金) 10:21:27
「代入の表記と似せたように hoge= と末尾に = つき表記ができるメソッドを作ることができる」
が正解
hoge.foo=123 は代入ではなくただの「末尾に=記号がついたメソッド」
hoge.bar(123) であるのと同様に
hoge.foo=(123) であるだけ

ただし Ruby は末尾に等号を含むメソッドの解釈を便利に特殊扱いして
hoge.foo = 123 とメソッド名が空白で分断されているようになってても敢えて Hoge#foo= を呼ぶ

なにか = 値 というふうに書かれていた場合、「なにか」がその場所で変数であるかどうかで挙動が違う
変数であったら、本当に変数代入が行われる
変数ではなかったら、「なにか=」 という末尾等号メソッドへのアクセスが可能かどうかチェックされる
どれでもなかったら単にエラー

574 :デフォルトの名無しさん:2009/11/20(金) 22:44:51
>>573
Rubyの変数って具体的にどんな物?

575 :デフォルトの名無しさん:2009/11/21(土) 00:39:46
ローカル変数、グローバル変数、インスタンス変数、モジュール変数…あと何かあったっけ
とりあえず具体的にも何も、変数は変数でしか無いのだが

576 :デフォルトの名無しさん:2009/11/21(土) 01:08:26
=の右辺が数値の場合は、左辺に数値を渡す。
それ以外はポインターを渡す。
と思ってたのだが

577 :デフォルトの名無しさん:2009/11/21(土) 01:11:56
なんか訂正微妙に中途半端にめんどくさそうなレスだな

578 :デフォルトの名無しさん:2009/11/21(土) 02:18:33
変数に代入ってのは右辺が何かに関わらず
ある名前(変数)に右辺のオブジェクトIDを割り当てるってことでしょ

でどれでもない場合エラーなんてあるの?無ければ新しくその名前の変数が用意されるんじゃないのか

579 :デフォルトの名無しさん:2009/11/21(土) 02:29:19
構文エラーのことでは?
左辺にリテラルとか。

580 :デフォルトの名無しさん:2009/11/21(土) 03:09:51
あ、なるほどそりゃエラーだ

581 :デフォルトの名無しさん:2009/11/21(土) 05:22:00
リテラル(``とか%x)の動作を再定義することって可能ですか?

582 :デフォルトの名無しさん:2009/11/21(土) 07:00:11
>>581
出来ない。
なお``はメソッドでありリテラルではない。

583 :デフォルトの名無しさん:2009/11/21(土) 07:06:57
できない
それを許される言語はほとんどないと思う
似てるのはC++0x(ユーザー定義リテラル)とLisp(リードマクロ)か?

584 :デフォルトの名無しさん:2009/11/21(土) 09:35:04
>>578
右辺を解決して辿り着いたオブジェクトのIDに左辺を関連付ける
「動かされる」のは常に、変数名である左辺
何度も言われているが、ひとつのオブジェクトに付箋のようにぺたぺた貼り付ける変数名、というのが極めて感覚的に近い

585 :デフォルトの名無しさん:2009/11/21(土) 09:39:53
>>570
レスあるがとうございます。
そのページは私もググって見つけました。
直ってると思われるのにエラーするのでおかしいかなと。
とりあえず該当箇所のmkmf.rbを無理やり変更したらコンパイルは通りましたが
思ったとおりうまく動きません。(TT)

>>571
レスありがとうございます。
rubyのバージョンは1.8.7-p173です。
HPが配布しているバイナリファイルにてインストールしているのが
もしかしたらいけないのでしょうか。

586 :デフォルトの名無しさん:2009/11/21(土) 09:59:56
31bit符号付整数
シンボル
オブジェクトID

587 :デフォルトの名無しさん:2009/11/21(土) 10:20:29
>>585
よく分からないんだけど、gem install でインストールしているわけじゃない?
「gemにてpg-0.8.0.gemをinstall」って言葉もよく分からない
gemを使ってインストールするときは
gem install pg-0.8.0
等とするのが普通なんだけどね。
1. .gem っていう拡張子まで書いている理由がよく分からないな
2. どんなコマンドを実行しようとしたのかコピペだけでもしてくれた方が
解決しやすいと思う。
3. あと、該当箇所のパッチもしくは変更後の行のコピペ

4. それと、HPが配布しているバイナリファイルっていう言葉の意味が分からない?
HPからダウンロードしたの?
5. ruby -v の出力結果も書いてね。
5個の質問に答えてくれたら解決するまで付きやってやる

588 :デフォルトの名無しさん:2009/11/21(土) 18:43:03
オーバーライド元メソッドを呼び出すのにsuperというのがありますけどこれは
継承されていない状態では動かないようです

class A
def foo(arg)
p arg
end
end

class A
def foo(arg)
arg.concat "\n"
super(*arg)  #ここで元のA#fooを呼び出したい
end
end

この状態でオーバーライド元のメソッドをオーバーライドしたメソッドから呼ぶ事って可能ですか?

589 :デフォルトの名無しさん:2009/11/21(土) 18:46:59
上書きするまえにaliasで元のfooに別名を与える

590 :デフォルトの名無しさん:2009/11/21(土) 19:10:11
> オーバーライド元メソッドを呼び出すのにsuperというのがありますけど
いやそのりくつはおかしい

591 :デフォルトの名無しさん:2009/11/21(土) 19:10:48
では正しいりくつをおながいします

592 :デフォルトの名無しさん:2009/11/21(土) 19:12:12
class B < A
def foo(arg)
arg.concat "\n"
super.foo(*arg)  #ここで元のA#fooを呼び出したい
end
end


593 :デフォルトの名無しさん:2009/11/21(土) 19:22:48
overrideとoverwriteの違い

594 :588:2009/11/21(土) 20:49:20
調べてみたらオーバーライドじゃなくて再定義ですね。すみません

>>589
の方法で出来ました。ありがとう

595 :569:2009/11/21(土) 23:20:27
>>587
>1. .gem っていう拡張子まで書いている理由がよく分からないな
.gemファイルをローカルへDLしてからインストールしました。

>2. どんなコマンドを実行しようとしたのかコピペだけでもしてくれた方が解決しやすいと思う。
gem install /tmp/pg-0.8.0.gem
でインストールしようとしたのですが、間違ってたでしょうか?

>3. あと、該当箇所のパッチもしくは変更後の行のコピペ
単純にエラーした部分を削ってしまった
def libpathflag の中の

LIBPATHFLAG+RPATHFLAG

LIBPATHFLAG
だけに変更。
それが正しいのかはよく分かりませんがコンパイルは通りました。

>4. それと、HPが配布しているバイナリファイルっていう言葉の意味が分からない?
>HPからダウンロードしたの?
HPのウェブサイトにて、HP-UXの各種ツールがDLできますのでそちらから。
ttp://h50146.www5.hp.com/products/software/oe/hpux/component/network/ix/
ruby本体とrubygemはこれでインストールしています。

>5. ruby -v の出力結果も書いてね。
すいません、週明けまで環境を見ることができません。 来週確認して書き込みますね。

596 :チンパンジー愛ちゃん:2009/11/22(日) 00:17:53
細かい点をいくつか確認させてね
>>595で紹介しているサイトでは
6. コンポーネント名がHP-UX 11i v2、HP-UX 11i v3の二つあるんだけど
v2, v3どっちを使おうとしているの?

また、コンポーネントがどっちでもrubyのバージョンは
web1 A.13.00の項目で
Ruby A.13.00-1.8.7-p160.001 A.13.00-1.8.7-p160.001
とあるので、バージョンは1.8.7-p160ではないかと思っているんだけど、
>>585
> rubyのバージョンは1.8.7-p173です。
7. と言っている。このp173のrubyはどこから出てきた?

>>569では
> PostgreSQL : 8.3
> ライブラリ : pg-0.8.0
と言っている。
>>595のサイトを見ると
web1 A.13.00
PostgreSQL* A.13.00-8.3.7.001 A.13.00-8.3.7.001
とあって、PostgreSQLはいいんだけど、ライブラリpg-0.8.0ってのが分からないな
gemで配布されているのはpostgres-0.7.9で、最終更新日は2008年1月18日だったりする。
0.8.0というバージョンで探すと
一応、pgってのがあるんだけど、ChangeLogの最終更新日は2004年だ。

これはもう使われていないアダプタなので、マシンをネットにつなげれるのなら
gem install postgres
などとしてこちらのアダプタを使用するのが吉
8. pg-0.8.0を使わないといけない理由は、一緒に配布されていたから使おうとしています。
だったりしない?
それだけの理由かつ、サーバをネットにつなげれるのなら、postgres-0.7.9を使った方がよい。
ネットにつなげれなくてもpostgres-0.7.9.gemをダウンロードしてインストすればよろし。

597 :チンパンジー愛ちゃん:2009/11/22(日) 00:33:32
ごめんね、間違ってた
http://rubyforge.org/projects/ruby-pg
を見るとpgの方が更新日新しいみたい

pgを使う方が更新日的には正しそう

それと、インストール方法は
gem install /tmp/pg-0.8.0.gem
であってるよ

598 :デフォルトの名無しさん:2009/11/22(日) 01:03:06
WinXP-ProでRuby1.8.6です。MP3再生をしようと思っています。

先ず、ttp://mono.kmc.gr.jp/proj/rubysdl/?GyakubikiRubySDL#l11 の
「BGMを鳴らしたい」がありましたので、この sample.ogg を Test.mp3 
に変えました。
次に、SDLをインストールするため、ttp://rubyforge.org/frs/?group_id=1006
からDLし展開しました。

ところが展開したディレクトリにコマンドプロンプトのcdで移動し、ここで 
ruby install_rubysdl.rb をしたところ、

ruby: No such file or directory -- install_rubysdl.rb (LoadError)

となりました。どうしたら良いでしょうか? ( >install_rubysdl.rb としても駄目でした)
目的はMP3の再生なので特にSDLには拘りません。


599 :デフォルトの名無しさん:2009/11/22(日) 01:14:11
モジュールなんですが
module M
def M::func(x)
p x
end
end

M::func(123)
include M
func(123)
みたいにincludeしてもしなくても呼べるメソッドを定義することって出来ますか?
M::funcとfuncを2つ定義すれば出来ますがもうちょっとスッキリする方があれが良いなと・・・

600 :デフォルトの名無しさん:2009/11/22(日) 01:15:36
>>598
その場所にinstall_rubysdl.rbがないんじゃね?
dirって打ってあるかどうか確認して

601 :デフォルトの名無しさん:2009/11/22(日) 01:22:17
>>599
関数的メソッド形式として利用したいユーザーが、意図的にモジュールを include する
それ以外はやっちゃだめだしトップレベルで include されてると期待してもだめ

602 :598:2009/11/22(日) 01:53:40
>>600
早速のレスさんきゅうです。
install_rubysdl.rbは、やはりありません。

上で書いた通り、SDLによるMP3に拘りませんので
どなたかご教授願います。
(手元の本やGoogleでもSDLの方法しか見つかりません)


603 :デフォルトの名無しさん:2009/11/22(日) 02:16:35
>>602
本当に再生さえ出来ればいいのならこんな方法もある
コマンドラインから再生できるプログラムを用意(以下の例ではmplayerを使用)して
mp3_filename = 'hoge.mp3'
system("mplayer #{mp3_filename}")
ffplayでも出来ると思うけどうちでは再生が安定しなかった・・・

あとlibmplayer.dllを使っても再生できそうだけどDLLのリファレンスが見あたらないな・・・(汗

604 :デフォルトの名無しさん:2009/11/22(日) 02:31:29
>>602
OLEを使う方法もあるな
ttp://www.google.co.jp/search?hl=ja&q=VBA+mp3+%8D%C4%90%B6

ただWIN32OLEは実装が微妙なところがあるので1.8.xだとひょっとしたらダメな可能性はある・・・

605 :デフォルトの名無しさん:2009/11/22(日) 05:44:58
MCIは微妙だからwaveout使う方がいいよ

606 :デフォルトの名無しさん:2009/11/22(日) 07:46:56
>>604
WIN32OLE、完成度高いと思って使ってた。。。
どのへんの実装が微妙なのか教えていただけませんか?

607 :デフォルトの名無しさん:2009/11/22(日) 07:50:25
>>599
module_function

608 :デフォルトの名無しさん:2009/11/22(日) 08:14:24
>>606
すまん。詳細は忘れたorz
以前に1.8.xのWIN32OLEが実装不十分で正常に実行できないのがあった
その時ググっていたら1.9.xのいくつかで改善されたらしいとどこかに書いてあったのだが・・・

609 :デフォルトの名無しさん:2009/11/22(日) 08:25:51
>>606
1.8で使ってるが問題起こったことは無い
他人の意見を鵜呑みにするなという良い例

610 :デフォルトの名無しさん:2009/11/22(日) 08:34:47
>>608-609
dです。
自分で問題にぶつかるまであまり気にしないことにします。

611 :デフォルトの名無しさん:2009/11/22(日) 08:49:06
思い出した
ttp://www.google.co.jp/search?hl=ja&q=InvokeVerb+win32ole
文法的な誤りではないので原因の特定までにかなり手こずった記憶がある
>>604の方法と関係があるかは確認していないけど、何らかの罠が有る可能性は
頭の隅に置いておいた方が良いかも

612 :デフォルトの名無しさん:2009/11/22(日) 10:33:44
Windows用の One-Click Installer の 1.9.1 はいつ頃出るのでしょうか。

613 :569:2009/11/22(日) 10:45:35
>>596
>6. コンポーネント名がHP-UX 11i v2、HP-UX 11i v3の二つあるんだけど
>v2, v3どっちを使おうとしているの?
>7. と言っている。このp173のrubyはどこから出てきた?
すいません、先に貼ったURLだとp160だったのですが、実際のDLページだと
p173になっており、実際にDLされたものもp173でした。
ちなみにUP-UXは11.23なので11iv2でDLしています。
ttps://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPUXIEXP1123

614 :デフォルトの名無しさん:2009/11/22(日) 10:47:26
>>612
出所を思い出せないから、本当かどうかは怪しいが
「もう出ないからRubyInstaller使ってね」って話がどこかにあったような

615 :デフォルトの名無しさん:2009/11/22(日) 10:59:09
>>598
コマンド起動してもいいなら、mplayer.exe だな。autotestで音鳴らすのに、これ使ってる。

616 :デフォルトの名無しさん:2009/11/22(日) 11:08:39
すんませんいきなり話題変わります。
Ruby/Tkでエントリーを表示すると
その中身は文字列になりますよね?
その文字列を数値にして、もしできなかったら(文字でできていたら)
エラーを返すにはどうすればいいですか?
計算機みたいなのをつくりたいんです。
初心者ですいません。


617 :デフォルトの名無しさん:2009/11/22(日) 11:18:17
ものすごおおおおおく単純には、その文字列が目的の文字だけ含む正規表現にマッチするかどうかを調べる

if /[1234567890]+/ =~ str then
puts '全部数字です'
else
puts '数字以外のものが入っています!'
end

618 :デフォルトの名無しさん:2009/11/22(日) 11:22:53
Integer(str)でよくね

619 :デフォルトの名無しさん:2009/11/22(日) 11:48:23
>>618
小数点入れたいというときに少し困る
それに、Integer() も Float() も例外をキャッチしないといけない
例外をキャッチできるような人はそもそもマニュアル読んで自力でできるはず
>>616の質問の書き方からしてまだそれは無理
だからわざわざ /[0-9]+/ ではなく /[1234567890]+/ と書いた

620 :デフォルトの名無しさん:2009/11/22(日) 11:48:58
>>614
どうもです。そうですか、1.91は出ないですか。そう言えば1.87も出てませんね。
自力でコンパイルなんてできないのでOne-Click Installerは本当にありがたかったのですが。
正規表現の戻り読みを使いたかったのですが。

621 :チンパンジー愛ちゃん:2009/11/22(日) 11:50:29
>>617
のだと、マイナスや小数点、指数表記などが扱えないので、
str.to_f
が賢いと思う 文字列で出来ているときは
0.0
が返ってくるので、この時は本当は0が入っているか
再度文字列チェックすればよい

622 :デフォルトの名無しさん:2009/11/22(日) 11:56:52
>>621
String#to_f で変換されるものと変換されないものの区別を自分でつけることはできる?
というか既にその処理「バグって」るだろ
最後の処理がとても非本質的
今の自分に必要なものだけ正規表現で通したほうがいい
小数が入って欲しくないかもしれないし、負の数が入って欲しくないかもしれない

623 :デフォルトの名無しさん:2009/11/22(日) 12:09:18
>>620
ActiveScriptRubyじゃダメ?

624 :デフォルトの名無しさん:2009/11/22(日) 12:29:23
>>618>>621のような人にはこれを見せることにしてる
irb> p "1_2_3".to_f
123.0
irb> p Integer("1_2_3")
123


625 :デフォルトの名無しさん:2009/11/22(日) 12:36:33
>>623
すみません、「ActiveScriptRuby」と「One-Click Installer」ってどう違うのでしょうか?
ちなみに今の1.86は One-Click Installerで入れました。

626 :デフォルトの名無しさん:2009/11/22(日) 12:53:22
ActiveScriptRubyの1.9.1安定版って、まだ出てないんじゃなかったっけ

627 :デフォルトの名無しさん:2009/11/22(日) 13:19:37
>>616 です
有難うございます。
解決しました。

628 :デフォルトの名無しさん:2009/11/22(日) 13:24:32
>>626
ホームページを見ると、Ruby-1.9.1-p243 Microsoft Installter Package(2009/7/20)
っていうのがあるけど、どうなんだろう?

ActiveScriptRuby and Other packages
http://www.artonx.org/data/asr/

ここのはどうなん?

Rumix - Ruby Starter Package with Installer
http://ruby.morphball.net/rumix/

629 :デフォルトの名無しさん:2009/11/22(日) 15:23:40
>>625
自分もよく知らないです。
どれ入れても大丈夫のような気はするけど。。。

Ruby/インストール - いなた屋 - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/inataya/d/Ruby/%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

630 :デフォルトの名無しさん:2009/11/22(日) 19:37:32
1.8.7を使いたければ、ActiveScriptRubyがいい。
One-Click Installerはまだ1.8.6しかなかったような気がする。


631 :デフォルトの名無しさん:2009/11/22(日) 22:02:48
Rubyを使うならMacかUbuntuにしておけ。
Windowsは窓から投げ捨てろ(窓だけに)

632 :デフォルトの名無しさん:2009/11/22(日) 22:06:38
晒し

633 :デフォルトの名無しさん:2009/11/22(日) 22:08:00
あげ

634 :デフォルトの名無しさん:2009/11/22(日) 22:24:00
「Windowsは窓から投げ捨てろ(窓だけに)」


き、決まったお (`・ω・´)シャキーン

(;´・ω・) あ、あれ・・・


(´;ω;`) ブハッ

635 :デフォルトの名無しさん:2009/11/22(日) 22:30:17
>>631

636 :デフォルトの名無しさん:2009/11/22(日) 22:38:45
サブイ

637 :デフォルトの名無しさん:2009/11/22(日) 23:16:20
pearlの後だからってrubyもさ(ry

638 :デフォルトの名無しさん:2009/11/22(日) 23:22:48
画像のサムネイルを作るのに便利なRubyのライブラリはありませんか?
レンタルサーバでも使えるように極力別のライブラリをインストールしなくてもいいようなものが良いです


639 :デフォルトの名無しさん:2009/11/22(日) 23:25:15
特にはないです

サムネイル作成が可能なプログラムをレンタルサーバにインストールして
sysytem メソッド等から直接呼んでください
たぶん一番早いし速いです

640 :デフォルトの名無しさん:2009/11/22(日) 23:30:28
画像処理系は基本的にlibjpegとかlibgifとかのラッパーだからなー。
このあたりは使う前提じゃないと見つからないんじゃないだろうか。


641 :デフォルトの名無しさん:2009/11/23(月) 00:04:39
レンタルサーバだと、プログラムのインストールが不可能だったりするし
難しいだろうな
PNGならRuby/PureImageで拡大縮小できるが・・・

642 :デフォルトの名無しさん:2009/11/23(月) 00:06:25
そういえばRMagickの開発を引き継いだ香具師はまだいないのかな。


643 :デフォルトの名無しさん:2009/11/23(月) 00:19:23
画像を外部ライブラリなしで操作できるスクリプト言語ってあんましないよね
実際的な速度で動作するとかまずないし

644 :デフォルトの名無しさん:2009/11/23(月) 00:28:50
WinXP(Ruby1.8.6)

下記コードで指数の値(val0)を出力したところ、
同じ値(1.0)のまま動きません。原因は何でしょうか?

count = 0
while
count+=1
break if count > 100 # 100回で終了
sleep 1
val0 = Math.exp(count/10)
puts "1sec #{count} #{val0}"
end


645 :デフォルトの名無しさん:2009/11/23(月) 00:31:24
count/10.0

646 :デフォルトの名無しさん:2009/11/23(月) 00:31:38
うおー、空 while なんて2年ぶりくらいに見た

Math.exp(count/10) の代わりに count/10 を表示してみればわかるかも

647 :デフォルトの名無しさん:2009/11/23(月) 00:49:58
>>645
さんきゅう


>>646
作法上ダメなんですか?


648 :638:2009/11/23(月) 00:50:21
やっぱり別のコマンドや画像所理ライブラリが必要なんですね
ありがとうございました

649 :デフォルトの名無しさん:2009/11/23(月) 01:20:55
>>647
>空 while
ダメって事はないけど

>>644みたいな例だと
(0...100).each{|count|p count}
とか
Range.new(0,100,true).each{|count|p count}
とか書くのが一般的じゃないかな

でも、自分の好きな方法で良いと思うよ

650 :デフォルトの名無しさん:2009/11/23(月) 01:41:51
whileやuntilやloopなどは
条件とか中の処理を間違えると無限ループしてしまう可能性がある
初心者は誤って無限ループを作ってしまうし、慣れた人でも結構気を使う

でも、(0...100).each は
中で余程おかしな処理を書かない限りまず無限ループにならない
回数が決まっているループなら、eachを積極的に使ったほうが良いと思うよ

651 :デフォルトの名無しさん:2009/11/23(月) 01:44:05
100回って決まってるなら、100.timesを使うなあ。
(0...100).eachってのは何の影響?

652 :デフォルトの名無しさん:2009/11/23(月) 01:52:09
>>651
カウンタにこだわらず「なんでもいいから100回」ならそれでいいけど
今回は厳密に「1から100まで」と数字に意味があるからね

ただ書き換えるなら1..100だと思うし、Range.newが一般的というのは同意できない

653 :デフォルトの名無しさん:2009/11/23(月) 04:58:15
101回じゃないのか

654 :デフォルトの名無しさん:2009/11/23(月) 05:15:53
ループの書き方なんて他人から押しつけられる物じゃないんだし
自分が困ったらよりよい方法を探せば良いだけでしょ

#メソッド+ブロックによるループは他言語ではあまり見ない気がするので
#Ruby初心者は理解しにくいかもね

655 :デフォルトの名無しさん:2009/11/23(月) 06:33:54
>>649
それ101回
わざわざバグらせてくれてありがとう

656 :デフォルトの名無しさん:2009/11/23(月) 06:37:12
これで誰が自演してたか明らかになったな

657 :デフォルトの名無しさん:2009/11/23(月) 06:51:34
なんで Integer#times のようなものがあるかというと、構成要素が1個で少なくて済むから
Range#each も結果的動作は同じだけれど、開始位置と終了位置の2要素が必要

>>644が悪手なのは while だからなのではなく

 ・ 無限 while
 ・ break で自力で抜ける
 ・ カウンタを初期化する、初期値は0
 ・ カウンタのインクリメントはループの初めに書く
 ・ メインの処理回数は100回で終了する
 ・ ただしカウンタは100はOKで、100を超えたときにbreakする

というように構成要素がやたら多いから
100.times{|i| … } のほうが間違わなくていいだろ

658 :デフォルトの名無しさん:2009/11/23(月) 07:22:50
>>653 >>655
100回だ。Rangeリテラルの説明を読め

659 :デフォルトの名無しさん:2009/11/23(月) 07:42:36
(1..100) と (1..100) は違うからな

ただの罠だが
特に2ch

660 :デフォルトの名無しさん:2009/11/23(月) 07:43:42
足りなかったので置いとく
.

661 :デフォルトの名無しさん:2009/11/23(月) 08:23:26
Rubyってそんな..と...の違いとかバグ産みやすい言語なんかw

662 :デフォルトの名無しさん:2009/11/23(月) 08:36:10
>>659
フォントの関係が違いがわからん・・・

663 :デフォルトの名無しさん:2009/11/23(月) 08:49:23
実際、.. と ... の機能を分けるのは問題が多いよな
ぱっと見で意味が分かりにくいし

664 :デフォルトの名無しさん:2009/11/23(月) 09:10:49
やっぱり neko operator のほうがいい?

0 ^..^ 100

665 :デフォルトの名無しさん:2009/11/23(月) 09:16:19
ここはきゅうり演算子を実装すべき
0 (::) 100

666 :デフォルトの名無しさん:2009/11/23(月) 09:22:30
.. と ... を使い分けるのって perl 由来だっけ? awk だっけ?

667 :デフォルトの名無しさん:2009/11/23(月) 09:23:26
こんなのも見つけた
ttp://slashdot.jp/~YamaKenZ/journal/312265

[3,7] → 3..7
(3,7] → 3!..7
[3,7) → 3..!7
(3,7) → 3!..!7

668 :デフォルトの名無しさん:2009/11/23(月) 09:34:48
>>667
これいいね。rubyでも採用してほしい


669 :デフォルトの名無しさん:2009/11/23(月) 11:13:16
>>668
先生!配列の [3, 7] と 閉区間の [3, 7] の区別がよくわかりません!

670 :デフォルトの名無しさん:2009/11/23(月) 11:15:10
対応表をよく見て見ろ

671 :デフォルトの名無しさん:2009/11/23(月) 11:19:40
Range.newでいいじゃん

というかフツーは数字のほうをいじって2ドットで書けるように使うと思う
3ドットはあまり見ない

672 :デフォルトの名無しさん:2009/11/23(月) 11:19:41
ここまでこれ以上妙な記法増やすなヴォケというレス無し

673 :デフォルトの名無しさん:2009/11/23(月) 11:24:53
これ以上記号ふやすのヤメレ

674 :デフォルトの名無しさん:2009/11/23(月) 11:59:33
=!=
とか
===
とか
使ってるのはPHPだっけ?

675 :デフォルトの名無しさん:2009/11/23(月) 12:02:47
>>671
ほんとは記号のほうをいじるべきなんだけどね
さすがに紛らわしい

676 :デフォルトの名無しさん:2009/11/23(月) 12:24:28
そこでAPLですよ

677 :デフォルトの名無しさん:2009/11/23(月) 13:33:22
>>674
=!=じゃなくて!==な
暗黙の型変換をしないで厳密に比較する演算子

678 :デフォルトの名無しさん:2009/11/23(月) 13:36:54
CGIやその他から受け取った入力を同じ形式でファイルにダンプ(Marshal使用)し、
後で取り出すプログラムを書いています。
取得時にはダックタイピングで区別なく保存データを作成していますが、
別のタイミングで復元しようとすると、CGIからの入力に関してCGIモジュールの依存が残っていて(?)
"CGIモジュールがない"とエラーになってしまいます。
保存時にto_sなどを加えてみたのですが、変わりません。

純粋に文字列だけを取り出し、CGIオブジェクトの依存を切るにはどうしたらいいのでしょうか?
Ruby1.8.7です。

679 :デフォルトの名無しさん:2009/11/23(月) 14:16:02
>>678
・ Marshal.load する前に、復元後のオブジェクトが存在するために必要なクラスを含む全モジュールを require しておく
・ 必要なデータだけを適当なキーの Hash オブジェクトにでもまとめ、その Hash だけをまーしゃるする

後者推奨

680 :デフォルトの名無しさん:2009/11/23(月) 14:27:44
>>678
まず第一に、今あえて古い cgi.rb を使うのはおすすめしない
webrick/cgi や Rack に切り替えた方がいいと思う

で、純粋な文字列を取り出す方法としては、次の手がある

pure_str = String.new(cgi['key1'])

>>679
それだと結局、CGIの依存は切れないんじゃ?

681 :678:2009/11/23(月) 15:13:19
>>679-680
ありがとうございます。
実は>>679で挙げていただいた後者の方法をとっていました。
>>680に挙げていただいたStringを新たに生成する方法で解決できました。

webrick/cgi、Rackともノーチェックでしたので、これから確認してみようと思います。
ありがとうございました!

682 :デフォルトの名無しさん:2009/11/23(月) 19:05:33
コマンドプロンプトでtest-specをインストールしようとしたら下記のようなエラーが出ます
二日間何回か試してるのですがインストールできません
403エラーではないのでしょうか・・・
C:\Documents and Settings\Owner>gem install test-spec
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 403


683 :デフォルトの名無しさん:2009/11/23(月) 19:11:13
gem install --verbose でやってみて。



684 :デフォルトの名無しさん:2009/11/23(月) 19:15:23
やってみます!

685 :デフォルトの名無しさん:2009/11/23(月) 19:17:50
こういうの見るとやってから書き込めよといつも思う

686 :デフォルトの名無しさん:2009/11/23(月) 19:32:04
>>685
--verboseつけたら解決するかも! とか初心者に分かるわけねーだろ

687 :デフォルトの名無しさん:2009/11/23(月) 19:38:33
解決というより、状況がより詳しく分かる、ってだけだがな。


688 :デフォルトの名無しさん:2009/11/23(月) 19:42:19
>>686
違う

689 :デフォルトの名無しさん:2009/11/23(月) 19:47:43
>>686
やってみますのレスはいらないってことでしょ

690 :デフォルトの名無しさん:2009/11/23(月) 19:50:34
まったく返事がなかったらなかったで
回答者は不安に思うかもしれないから多少の合理性はある
だいいちたった一行のレスにそんなに目くじらたてることでもないでしょ

691 :デフォルトの名無しさん:2009/11/23(月) 19:52:35
ねえよ
どんだけ秒速の世界に生きてんだよ

179 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
AzPainter/AzDrawing Part4 [CG]
坂本真綾vol.139 [声優個人]
coLinux野郎ぜ! Part7 [Linux]
【MMD】MikuMikuDance動画制作/鑑賞スレ【初音ミク】 part43 [YouTube]

新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)