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

Ruby 初心者スレッド Part 32

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0002デフォルトの名無しさん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/
0003デフォルトの名無しさん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/
0004デフォルトの名無しさん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/
0005デフォルトの名無しさん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/
0006デフォルトの名無しさん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 程度には使えるということになっている)
 本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
 初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
0007デフォルトの名無しさん2009/10/24(土) 07:07:22
おまけ

・Rubygem 0.x
 極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
 このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
 しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
 パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
 Rubygem は 1.0 も 1.1 も 1.2 も肝心なとこにバグ持ちなので極力 1.3 などの最新を使うこと
0008デフォルトの名無しさん2009/10/24(土) 12:42:59
へえ〜。理解した。おつ!
0009デフォルトの名無しさん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
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。
0010デフォルトの名無しさん2009/10/24(土) 13:05:21
あとこれも前スレから。


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

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

ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。
0011デフォルトの名無しさん2009/10/24(土) 17:44:09
http://jp.rubyist.net

とりあえず落ちていることを報告。
0012デフォルトの名無しさん2009/10/24(土) 19:48:01
質問があります。

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

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

cygwin のターミナルで着色されないのは環境変数 $TERM あたりが実際のターミナルと合ってないのだろう
0014デフォルトの名無しさん2009/10/24(土) 20:55:11
cucumberがTERM=cygwinに対応してないんだろう
0015デフォルトの名無しさん2009/10/24(土) 21:26:23
cygwin だからといって TERM が cygwin だとは限らない
0016デフォルトの名無しさん2009/10/24(土) 22:19:07
ckはcygwinじゃなかったっけ?
0017デフォルトの名無しさん2009/10/24(土) 23:17:48
いつになったら CMD.EXE 上で UTF-8 表示出来るようになるのかしら
0018デフォルトの名無しさん2009/10/24(土) 23:20:14
だよな
それが解決したら文字コードまわりの問題の殆どが解決する稀瓦斯
0019デフォルトの名無しさん2009/10/24(土) 23:20:55
ブロックパラメータの引数の数を調べる方法はありますか。
やりたいことは、ブロックの引数の数によって処理を変えることです。

def f()
n = ブロックの引数の数
if n <= 0
...
else
...
end
yield
end
0020デフォルトの名無しさん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
0021デフォルトの名無しさん2009/10/25(日) 00:14:09
>>19
def f
prc = Proc.new
n = prc.arity
p n
end
f{|a,b,c| } #=> 3

詳しくはマニュアルでProcを調べろ
0022デフォルトの名無しさん2009/10/25(日) 00:39:05
mapやeachが現在何回目のループなのか知る手段ないですか?
0023デフォルトの名無しさん2009/10/25(日) 00:41:42
>22
with_index
0024デフォルトの名無しさん2009/10/25(日) 00:52:23
>>23
ぐぐってみたんですが使い方がわからないです
こうではないですよね・・

[1,2].map.with_index do |n,i|
puts i
end
0025デフォルトの名無しさん2009/10/25(日) 00:56:25
ubuntu に ruby をインストールしてみました
端末から ruby と入力すると exitで$(bash)に戻れません

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

Googleで調べてみたのですが
あまりに初歩すぎる疑問のようで
回答を見つけることが出来ませんでした
0026デフォルトの名無しさん2009/10/25(日) 01:11:03
mapにwith_index っていうのは、標準にはなくて
自分で定義しろということでしょうか?
0027デフォルトの名無しさん2009/10/25(日) 01:11:16
>>25
Control + D

恐らく、やりたいことに最も近いのは ruby でなく irb を使うこと
ruby はエディタで既に書いたコードを実行するために使うと覚えとこう
0028デフォルトの名無しさん2009/10/25(日) 01:30:11
>>17
chcp 65001
できるだけって感じだけど
0029デフォルトの名無しさん2009/10/25(日) 01:32:30
>>27
ほんとだ、$(bash)に戻ってこれた

けど、rubyの人達って Emacs Emacsって書いてありますけど
やっぱりEmacsなんでしょうか?
0030デフォルトの名無しさん2009/10/25(日) 02:05:34
>>26
.with_index の使い方は>>24であってる。(0始まりに注意)
が、バージョンによってはそもそも存在しなかったり、require が必要
だったりするので、バージョンを明示せよ。
0031デフォルトの名無しさん2009/10/25(日) 02:20:37
>>29
本気でプログラマ目指すとかならemacsとかviも触っておくに越したことはないけど
普通に勉強するならgedit辺りで良いと思うよ
gedit ファイル名 &
でコード書いて、セーブしたらターミナルに戻って
ruby ファイル名
で実行すれば良いんじゃないかな
ファイルに書き起こすまでもないようなコードはirbで直接書いて実行するのも良い
0032デフォルトの名無しさん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呼んでもダメそうだし
0033デフォルトの名無しさん2009/10/25(日) 02:31:36
そういえば1.8.7のブロックなしmapは扱いが特殊だったな。
0034デフォルトの名無しさん2009/10/25(日) 02:32:27
Æ
&aElig;
0035デフォルトの名無しさん2009/10/25(日) 02:36:23
1.8.6でインデックス付きmapやるなら、インデックスだけ取ってきて
中身にはイテレータ使わずにループ書いたほうが楽そうだな
0036デフォルトの名無しさん2009/10/25(日) 02:55:50
>>32
ありがとうございます
ヴァージョンは1.8.6です
each_with_indexの動作確認できました
0037デフォルトの名無しさん2009/10/25(日) 03:16:32
RubyってPHPやPerlほどwebで使われてないと思うけどなんで。
0038デフォルトの名無しさん2009/10/25(日) 03:38:03
Perlほど昔から使われてたわけじゃないし、
PHPみたいにWeb専用言語でもないからじゃないか?
使えるアプリもそれほど多くないと思うし
0039デフォルトの名無しさん2009/10/25(日) 04:18:53
>>37
PHPやPerlで用が済むから
0040デフォルトの名無しさん2009/10/25(日) 04:38:57
ていうか Ruby のバージョンによらず何事もなければ each_with_index が出るのが普通
これで間に合わない場合にのみほかの手段を講じる
0041デフォルトの名無しさん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]]
0042デフォルトの名無しさん2009/10/25(日) 07:44:14
これってバグになりますか?

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


t = Array.new(3)
t[99]= 88
0043デフォルトの名無しさん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]

0044デフォルトの名無しさん2009/10/25(日) 08:12:43
動くのは知ってるんですが
仕様上、この構文が許されてるのかどうかを知りたいんです
特に、Array.newなんて関数が用意されてるのに
t = Array.new(3)
t[6]= 6
こんなことできるんじゃArray.newの立場はどこへ?
0045デフォルトの名無しさん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」が表示されます。
エラーを捕捉できないのでしょうか?
0046デフォルトの名無しさん2009/10/25(日) 08:26:23
>>45
できるはずだけど、もし自分でできないならCGIExceptionをインストールしてみたら?
ttp://cgi-exception.rubyforge.org/
0047デフォルトの名無しさん2009/10/25(日) 09:35:13
>>44
Array.new は関数ではない
揚げ足取りではなく本当に学習的な意味で、それを関数と捉えてはいけない

Array.new は Array クラスの インスタンス(オブジェクト)を生成する
Array オブジェクトの [] メソッドは内部領域にデータを追加する
そんだけ
0048デフォルトの名無しさん2009/10/25(日) 09:38:59
インストールしてみましたが、シンタックスエラー?は表示されませんでした。
>>45もシンタックスエラー?以外は捕捉できます。
0049デフォルトの名無しさん2009/10/25(日) 09:55:24
(eval内は別として)文法エラーは、「実行前」に検出されるもの。
検出する処理さえ実行される前だから、当然捕捉できない。
0050デフォルトの名無しさん2009/10/25(日) 10:22:42
>>44
ある程度大きな配列で、サイズが事前にわかっているなら
動的にちまちまと拡張するよりは最初にサイズを予約したほうが効率的

なんだけど普通は気にしなくていい
0051デフォルトの名無しさん2009/10/25(日) 10:32:17
ある程度大きな配列ったって1000や1万では話にならんけどな
なおかつインデックスで要素追加をすること前提
0052デフォルトの名無しさん2009/10/25(日) 12:41:05
>>47
Array オブジェクトの []= メソッドはオブジェクトの内部領域にデータを追加する

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

>>50
なるほど、やっぱりその程度の使い方なんですね
0054デフォルトの名無しさん2009/10/25(日) 18:26:28
>>53
Rubyだとnewは演算子でもなんでもなく、Classクラスから継承したインスタンスメソッド
http://doc.okkez.net/187/view/method/Class/i/new
0055デフォルトの名無しさん2009/10/25(日) 18:37:40
関数だと考えるとわからなくなるというのは「クラス→インスタンス」モデルを考えれということなんだと思う
呼び名が用語的に間違っているから正しい呼び方をしろという意味ではない、たぶん

Array.new は Array クラスのインスタンス(オブジェクト)を返す
Array.new(引数つき) は Array オブジェクトを作成し、引数に応じた状態に変更してから返す
Arrayオブジェクト[インデックス]=値 は Arrayオブジェクトの []= メソッドに引数 (インデックス, 値) を渡し、
メソッドに規定された状態変更等を行ってから Array オブジェクトを返す
地の文の [] は Array.new を簡単に書けるようにわざわざ組み込まれたもので、Array.new と同じものを返す
0056デフォルトの名無しさん2009/10/25(日) 18:41:06
インスタンスの状態なり情報を内部領域って言うのはなんか怖いな
0057デフォルトの名無しさん2009/10/25(日) 18:42:44
クラスもまた、オブジェクト(Classクラスのインスタンス)で表される、ということが
JavaとかC++からの連想だとわからないよね。
0058デフォルトの名無しさん2009/10/25(日) 18:58:58
>>56
C で書かれてる Array や Hash の場合は格納されたデータ本体を外部から触れないからなー
どこに格納されてると説明する?
0059デフォルトの名無しさん2009/10/25(日) 19:07:46
>>58
まさにそういうCレベルで意識させることに「内部領域」という言葉の怖さを見てとったんだけど
それが目的なら仕方ないとしか
0060デフォルトの名無しさん2009/10/25(日) 19:09:24
>>48
>インストールしてみましたが、シンタックスエラー?は表示されませんでした。

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

というふうにすれば、シンタックスエラーも表示されたりしないかな。
0061デフォルトの名無しさん2009/10/25(日) 19:21:13
>>59
URI は、インスタンス変数に URI データを格納してるじゃん
Net::HTTP も、インスタンス変数にサーバからのデータを格納してるよな
でも Array とか String とか Hash とか Regexp とかは、インスタンス変数があるわけじゃないよな
0062デフォルトの名無しさん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
0063デフォルトの名無しさん2009/10/25(日) 19:25:11
あ、CGIだっけ?content-type吐き出すの忘れてた
0064デフォルトの名無しさん2009/10/25(日) 19:25:52
>>61
Rubyのインスタンス変数は原則プライベートだから
インスタンスがどういう情報の持ち方をしていようが何の興味もないよ
0065デフォルトの名無しさん2009/10/25(日) 19:51:01
>>45
もしApacheを使ってるなら
Apacheの設定次第で、エラーの内容をログファイルに出すこともできる
どうしても表示されないなら試してみるのもいいかも
0066452009/10/25(日) 21:37:48
スクリプト本体を別ファイルにしてloadすれば、
シンタックスエラーが表示されました。

今回はこの方法を使わせていただきたいと思います。
ありがとうございました。
0067デフォルトの名無しさん2009/10/25(日) 21:40:23
一回 ruby -wc でシンタックスチェックしてみろよ
0068デフォルトの名無しさん2009/10/25(日) 21:43:03
というか手元に Ruby 実行環境がないのだろ
0069デフォルトの名無しさん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)
0070デフォルトの名無しさん2009/10/25(日) 22:59:13
gem なら require 'rubygems'
0071692009/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)
0072692009/10/25(日) 23:02:09
参考に観てたblogのソースだと空白が仕込まれてたみたいです。。
>>70さん ありがとございました。
0073デフォルトの名無しさん2009/10/25(日) 23:14:53
require 'rubygems' は書くべきではない、という指摘もあったな。
1.9なら不要だし、1.8では、ない場合はどうせエラーにするだけだし、
あるならRUBYOPTにセットしとけ、みたいな感じ。
0074デフォルトの名無しさん2009/10/25(日) 23:24:43
>>73
君は使いもしないライブラリを読み込むべきだと考えるのかね
0075デフォルトの名無しさん2009/10/25(日) 23:30:38
RUBYOPT は自分のために自分の環境で設定するもの
他人に強制したり期待したりするものではない
0076デフォルトの名無しさん2009/10/25(日) 23:43:48
RUBYOPT構想は結局失敗だったな
0077デフォルトの名無しさん2009/10/25(日) 23:47:28
そもそも環境変数自体が失敗
0078デフォルトの名無しさん2009/10/25(日) 23:57:39
使いもしないライブラリとやらが組み込まれてやんのw
0079デフォルトの名無しさん2009/10/25(日) 23:58:47
うるせぇエビフライぶつけんぞ
0080デフォルトの名無しさん2009/10/26(月) 00:03:54
一度でも読み込んだライブラリは二度読み込まないようにすればいいのではないだろうか
0081デフォルトの名無しさん2009/10/26(月) 00:53:10
>>80
それはそうなってるから。
0082デフォルトの名無しさん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>'
ってかんじで怒られた、どっか間違ったか?
0083デフォルトの名無しさん2009/10/26(月) 06:20:08
p0で失敗しても文句は言えんな
0084デフォルトの名無しさん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
0085デフォルトの名無しさん2009/10/26(月) 08:15:39
Ruby1.9.1 の Windows 用でそれをするとはいろいろな意味でチャレンジャーというか煽り屋というか
0086デフォルトの名無しさん2009/10/26(月) 08:20:42
そんなんただのラブレターだろ
「いますぐRuby1.9.1の最新版パッチのWindowsバイナリを公開しろ、
さもなくば基幹的デファクトスタンダードライブラリのアップデート不能を以ってRubyの価値を減じる」
というラブコール
0087デフォルトの名無しさん2009/10/26(月) 08:26:30
最新版のWindowsバイナリー! 早く来てくれー!

俺もコンパイルに成功すれば、Windowsバイナリ公開したいのに
make test-allがなかなか通らない……
メンテナの方々はどんな作業をやってるんだろう
0088デフォルトの名無しさん2009/10/26(月) 08:33:12
ttp://rubyforge.org/frs/?group_id=167
ruby-1.9.1-p243-i386-mingw32 は一応ないわけでもない
0089122009/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にしても化けるし意味わからんちん
0090デフォルトの名無しさん2009/10/26(月) 12:49:19
とりあえず ruby が糞だということは良く伝わりました
本当にありがとうございました
0091デフォルトの名無しさん2009/10/26(月) 12:57:45
ラブレターなら直接相手に言わないと伝わらないんじゃないか
0092デフォルトの名無しさん2009/10/26(月) 13:07:20
>>91
リア充は帰れ

ラブレターってのは
「○○って△△さんのこと好きなんだって」
「えーうそー△△ちゃん可哀想〜」
みたいに周りからじっくり攻めていくのが正しい姿
0093デフォルトの名無しさん2009/10/26(月) 13:10:00
明らかに周りからも祝福されてねーじゃねーか
0094デフォルトの名無しさん2009/10/26(月) 13:24:46
なにごとも一度でうまくいくことはそうそうないよ
突然話を振るよりも事前のネゴとコネと日頃のコミュニケーションが大事
0095デフォルトの名無しさん2009/10/26(月) 13:33:47
>>92
> 「えーうそー△△ちゃん可哀想〜」
やめろ
0096デフォルトの名無しさん2009/10/26(月) 14:57:09
クソワラタwww
0097デフォルトの名無しさん2009/10/27(火) 04:59:52
ruby1.8.7をcheckinstallでRPMパッケージを作成してインストールしたのですが、
ri -cコマンドを打っても標準ライブラリのクラスが表示されません。(Railsのクラスのみ表示される)
ri GCと打ってもNothing known about GCと出力されるのです。
これはrubyのriドキュメントがインストールされてないということでしょうか?
RPMパッケージでインストールせずにconfigureでオプション付けたりしないといけないのかな。
0098デフォルトの名無しさん2009/10/27(火) 05:51:33
>>97
checkinstallはよくわからないけど、自前でコンパイルするときは
./configure
make
sudo make install
sudo make install-doc # ドキュメントのインストール
が必要だった気がする
0099デフォルトの名無しさん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
0100デフォルトの名無しさん2009/10/27(火) 06:35:07
よーわからんが、Marshalはオブジェクト全体の復元しかできない
復元してからオブジェクトが同一かどうかチェックするしかないな
0101デフォルトの名無しさん2009/10/27(火) 06:52:34
>>100
そうですね、Marshalだとかそういうライブラリは、この際あまり関係なかったですね
保存時のオブジェクトが復元時のインスタンスのオブジェクトと違う場合を許容したい場合は
どのような処理をすればいいでしょうか、ということみたいです
クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

イメージとしては クラス変数にし対して obj.each{|i| i=0 if !i.exist? }
という配列処理っぽいことがやりたいです (もちろん配列じゃないのでこの操作は不適ですが)
0102デフォルトの名無しさん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!
0103デフォルトの名無しさん2009/10/27(火) 07:29:36
>>101
>クラス変数が一つ一つ存在するかチェックして、なければ初期化、しかないでしょうか

よーわからんけど、オブジェクトにバージョン番号をつける方法じゃだめかな。
バージョン番号が違っていれば初期化、とか。
0104デフォルトの名無しさん2009/10/27(火) 07:29:49
===
0105デフォルトの名無しさん2009/10/27(火) 07:43:32
質問です。
1. プラットフォームがwindowsかどうかを判定する方法は、どうするのがいちばんいいでしょうか。
RUBY_PLATFORM をチェックするのが王道だと思いますが、そのチェックの仕方で悩んでいます。

2. windowではバイナリファイルの読み書きにはFile.open(file, 'rb')のように'b'をつけないといけませんが、
これはcygwinでも同じでしょうか。
('b'が必要なプラットフォームが何かを知ろうとしています)
0106デフォルトの名無しさん2009/10/27(火) 07:58:24
fopenの仕様を読みましょう
0107デフォルトの名無しさん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 かな?

ということでやりたいことは、できそうです スマートな方法とは言い難いですが・・・
0108デフォルトの名無しさん2009/10/27(火) 08:08:23
すいません、最後は a.ver が 0 のとき
if a.ver < current_version の間違いですね
0109デフォルトの名無しさん2009/10/27(火) 09:13:30
>>105
1. は ttp://jp.rubyist.net/magazine/?0017-CodeReview#l17
0110デフォルトの名無しさん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)
0111デフォルトの名無しさん2009/10/27(火) 09:37:09
自動で判断するぶんには RUBY_VERSION =~ /mswin|mingw/ でいいんじゃね
クラス変数とかに結果入れておいてユーザーが変更可能にしておくとかすれば喜ばれそう
0112デフォルトの名無しさん2009/10/27(火) 09:52:38
バイナリ扱う時に環境判断せずに「とりあえずbつけとけ」ではだめなんだっけ?
0113デフォルトの名無しさん2009/10/27(火) 09:55:16
ミリ秒の差が数千万円になるようなエッジな環境では命取り
0114デフォルトの名無しさん2009/10/27(火) 09:55:44
>>112
それが望ましいっす。
0115デフォルトの名無しさん2009/10/27(火) 10:32:51
>>107
Marshalで保存したオブジェクトは自分のクラスを記録してるから
別のクラスのインスタンスとして復元する事は出来ない
Hashを中間データとして使う方法をすすめる
ついでにmarshal_dumpとmarshal_loadについて調べておくといい
0116デフォルトの名無しさん2009/10/27(火) 10:39:58
>>102で用が済むと思うのだが
0117デフォルトの名無しさん2009/10/27(火) 11:09:13
質問します。
ディレクトリ内にあるhtmlファイルの読み込みで、Data/a/1.htmlを読み込ませたあと
Data/b/1.html→Data/c/1.html・・・とずらずらとディレクトリ違いの同じ名前のhtmlファイルを
読み込ませるにはどうしたらいいですか?
0118デフォルトの名無しさん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
0119デフォルトの名無しさん2009/10/27(火) 11:13:36
>>117
Dir.glob("Data/*/1.html") do |file| ... end
01201172009/10/27(火) 11:24:16
即レスどうもです!
とても参考になります!
ちょっくら試してみます。
ありがとうございました!
0121デフォルトの名無しさん2009/10/27(火) 22:59:08
しつもーん!
どこからも参照されなくなったオブジェクトは GC によって破棄されるだよね?

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

この場合 /正規表現オブジェクト/ はループのたびに生成されるの?
0122中田2009/10/27(火) 22:59:18
>>89
Power ShellのUTF-8対応なんてしらん
0123デフォルトの名無しさん2009/10/27(火) 23:04:27
>>121
いいえ、固定の正規表現リテラルはパース時にチェックされ、スクリプト内で1回だけ生成され保持参照されます

ただし、変数を #{ } などで含んでいる場合は毎回変数を参照して新規作成される
最初の1回だけにしたい場合は //o と o オプションをつける
この理屈で言うと、/re/ がたくさんあるとメモリ食う
0124デフォルトの名無しさん2009/10/27(火) 23:19:19
>>123
なるほど、ありがとうございました。
0125デフォルトの名無しさん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にでも書き出して、
ブラウザで見た方がいいんじゃないですかね。
0126デフォルトの名無しさん2009/10/27(火) 23:31:54
そーいえば、PowerShellはシェルとしてはcmd.exeとしては同レベルです。
コネがある方がいらっしゃいましたら、ちゃんとUnicode通るようになんとかしてやってください
0127デフォルトの名無しさん2009/10/28(水) 00:05:56
WriteConsoleWでがんばってください
0128デフォルトの名無しさん2009/10/28(水) 09:30:42
"123.6"をdecimalの123.6に変換するメソッド(例えばto_iのようなもの)はないでしょうか?
0129デフォルトの名無しさん2009/10/28(水) 09:39:40
decimalではなくてfloatでした。すいません。
0130デフォルトの名無しさん2009/10/28(水) 09:56:03
>>128
マニュアル嫁
文字列だから String のマニュアルを読む
ttp://www.ruby-lang.org/ja/man/html/String.html
0131122009/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 || (     )  どうしてこんなことに…
| ̄ ̄\三⊂/ ̄ ̄ ̄/
|    | ( ./     /
0132122009/10/28(水) 10:00:08
誤爆
0133122009/10/28(水) 12:03:40
変なもん誤爆しちゃった…

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

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

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

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

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

とりあえず、解決ということでありがとうございました。
0134122009/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も問題ないので、それでもいいか、という気がしています…。
0135デフォルトの名無しさん2009/10/28(水) 12:19:05
cygwinのttyはWindowsのコンソールとは見なされないからね。
それはもうcygwinとmswin32を組み合わせるのが悪いとしか言いようがない。
0136デフォルトの名無しさん2009/10/28(水) 15:05:18
拡張モジュールの中で struct FRAME や struct RNode を触りたいんですけど、ruby.hには含まれていなくて困っています。
今はnode.cから extern strct RNode { ... }; を自分のソースにコピーしていますが、
もっといい方法があると思うので、ぜひ教えてください。
0137デフォルトの名無しさん2009/10/28(水) 15:42:49
rbbrのツリーってタブおしたら落ちない?再現率100%なんだけど
0138デフォルトの名無しさん2009/10/28(水) 16:56:22
>>136
node.cって何?

1.8ならenv.h、node.hが普通にあるはず。
1.9なら方法はないので諦めてください。
0139デフォルトの名無しさん2009/10/28(水) 19:18:40
拡張ライブラリのソースを ext/foo/foo.c に置いたら、extconf.rb も同じ場所に置かないといけない?
それともextやREADMEと同じ場所においておくもの?
0140デフォルトの名無しさん2009/10/28(水) 19:21:51
gem なら Rakefile に gem.extensions = 'ext/extconf.rb' とか直接書く
0141デフォルトの名無しさん2009/10/28(水) 20:42:02
>>139
基本的には同じところに置かないといけない。
別のところにも置くことはできるけど、それを聞いてくるということは、説明してもしかたなさそう。
0142デフォルトの名無しさん2009/10/28(水) 22:54:07
>>136
何のために?
99%方針が間違ってる。
0143デフォルトの名無しさん2009/10/29(木) 17:06:54
htmlファイルの読み込みについてなんですが、
マッチングでマッチした文字列以降を表示させるにはどうすればいいですか?
0144デフォルトの名無しさん2009/10/29(木) 17:13:22
HTML あんま関係ないな

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

# <title></title>で囲まれた文字列
/<title.+?>(.+?)<\/title>/i =~ html
puts $1
0145デフォルトの名無しさん2009/10/29(木) 17:14:47
>>143
コードを書いて実行すればいいよ
01461432009/10/29(木) 17:26:50
>>144-145
あざっす!!
0147デフォルトの名無しさん2009/10/29(木) 18:17:28
フォームから入力されたユーザー名とパスワードで
Kerberos認証をしたいのですが何か方法はありますでしょうか?
(ApacheのBasic認証にKerberosを利用するのではなく、
Rubyで作成したCGIの任意の箇所で認証処理をしたいです。)

ライブラリ等あればいいのですが…。
Kerberos認証を行うシェルを作成して、
CGIからユーザー名とパスワードを渡して実行させるしかないですかね?
0148デフォルトの名無しさん2009/10/29(木) 20:26:46
>>143
$'
0149デフォルトの名無しさん2009/10/29(木) 21:34:35
>>147
使ったことないけど、http://rubyforge.org/projects/krb5-auth/ とかかな。
0150デフォルトの名無しさん2009/10/30(金) 10:12:29
質問
Time#to_i の秒数って、時差というかタイムゾーンとかどうなってますか?
0151デフォルトの名無しさん2009/10/30(金) 11:07:10
そのオブジェクトが地方時か協定世界時かにかかわりなく、
to_iが返すのはUnixタイム。
0152デフォルトの名無しさん2009/10/30(金) 11:11:15
あのへんは UTC とはなんぞやということを外部で習ってるということ前提だからな
Ruby で初めて意識したという人にとってはやや不親切だ
0153デフォルトの名無しさん2009/10/30(金) 11:19:13
to_i で整数にして計算して at で戻すと一瞬わけわからんことに
0154デフォルトの名無しさん2009/10/31(土) 04:36:09
教祖がデビアン住人だしな。世界の外の事は知らない。
0155デフォルトの名無しさん2009/10/31(土) 07:35:31
>>154
どういう意味?
0156デフォルトの名無しさん2009/10/31(土) 10:27:39
教祖とか宗教とかモルモンとかそういう単語の入ったレスは読み飛ばしてOK
NGにしておいても一向に損をしないことを保証する
0157デフォルトの名無しさん2009/10/31(土) 16:53:54
Pentium4(HT)のWindowsXP環境で
CPUを100%使い切って計算しようとおもったら、マルチスレッド対応にしないとだめかな?
タスクマネージャーみたら、なんかCPUに余力が有るみたいなんだが・・・
0158デフォルトの名無しさん2009/10/31(土) 17:05:46
複数プロセス同時に動かすのは?
0159デフォルトの名無しさん2009/11/01(日) 21:12:16
>>157
HTは、1コアを2コアに見せかける技術だから、1コアをもし使いきっているなら、
タスクマネージャでどう表示されようが、100パーセント使い切ることになるように思うけど、どうだろう。
ファイルやネットワークの入出力がある場合は100パーセントになりにくいけど、
非同期I/Oを使って頑張れば100になるんじゃないかなー。

最近のCPUは2コアが普通だから、158のように複数プロセス起動しないとだめだろうね。
0160デフォルトの名無しさん2009/11/01(日) 23:49:32
そんなことまで考えてプログラミングしてるのか
すごいなお前ら
0161デフォルトの名無しさん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・・・のようにあとで取得したいのですが、可能でしょうか?

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

/begin ((?foo<(a|b)>),)*\g<foo> end/
0164デフォルトの名無しさん2009/11/02(月) 08:06:53
Rubyの正規表現と称して>>163がOniguruma実装限定の正規表現持ち出してきたのが笑える
0165デフォルトの名無しさん2009/11/02(月) 08:23:44
begin 〜 end だけ抽出しておいてそれに (a|b) の scan かけるんじゃだめなん
0166デフォルトの名無しさん2009/11/02(月) 10:51:59
>>164
1.9ならOnigurumaが標準だろ
0167デフォルトの名無しさん2009/11/02(月) 10:55:27
そんな寝言は1.8.7を撲滅してからほざくがよいぞ
それまでは両バージョン用併記か注釈で対応バージョン明記
0168デフォルトの名無しさん2009/11/02(月) 10:58:37
スレとしては 1.8.7 が推奨バージョンなんだから、
1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな
0169デフォルトの名無しさん2009/11/02(月) 11:04:48
普段く1.9の質問したら、氏ね、1.8使えと煽るくせに、
正規表現は1.9で書き込むとか、
ここの住人はダブルスタンダードだな、おい
0170デフォルトの名無しさん2009/11/02(月) 11:24:05
1.9でレスしてもいいんだがそうと明記すべきだぬ
0171デフォルトの名無しさん2009/11/02(月) 11:24:40
いつの話だよ
さすがに今1.9を使うなって奴はいないだろ
0172デフォルトの名無しさん2009/11/02(月) 11:28:12
>>169
だって君の言う「ここの住人」って、一人しか居ないわけでもなければ、
まったく同じ考え方をする集団ってわけでもないもの。
ダブルスタンダード認定は、前者と後者が同じ人間によって書き込まれたことを
確認してからでないと。
0173デフォルトの名無しさん2009/11/02(月) 11:32:48
初心者が使用すべきものと熟練者が使用して便利なものとは違うということをいまさら講釈しないといかんのか
0174デフォルトの名無しさん2009/11/02(月) 16:05:25
1.9はsp2出るまで町だな。
0175デフォルトの名無しさん2009/11/02(月) 16:27:06
1.9.3のこと?
0176デフォルトの名無しさん2009/11/02(月) 17:33:30
2.0マダー
0177デフォルトの名無しさん2009/11/02(月) 17:39:55
>>171
います
0178デフォルトの名無しさん2009/11/02(月) 21:01:12
>>168
>1.9 限定動作は「1.9.1 だとこれで一発」みたいなコメントはつけとくべきかもな

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

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

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


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

だとすると、プロセス間通信とかを眼中にいれて設計しないとダメってことかな?
ってことは、向かうところはdRubyあたり?
0180デフォルトの名無しさん2009/11/03(火) 01:06:18
ほう、膨大な計算量を必要とする分野にも進出してるんだなあ
0181デフォルトの名無しさん2009/11/03(火) 03:07:06
>>180
実用とか研究とかじゃなくて趣味だけどね。
Rubyでやってもいいんじゃない?ってかんじで
0182デフォルトの名無しさん2009/11/03(火) 06:53:38
Rubyの入門書では、サンプルプログラムの出力を大抵以下のように書いてます。
puts 'Hello World!'
ですがたまに以下のように書き方も見かけます。
$stdout.puts 'Hello World!'

どっちも正しいと思いますが行儀の良い書き方という意味では後者になるのですか?
0183デフォルトの名無しさん2009/11/03(火) 07:07:13
意味不明。内部でやってることは同じだし後者には何のメリットも無い。
0184デフォルトの名無しさん2009/11/03(火) 07:16:11
printf("Hello World\n");と
fprintf(stdout,"Hello World\n");の違いみたいなもんだぞ
簡略できるようにしてあるのにあえて冗長に書く必要はないと思う
0185デフォルトの名無しさん2009/11/03(火) 07:48:49
冗長に書く意味があることはありうる

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

むしろ後者を書かれるとがっかりだ
むしろそのサイトなり解説書なり晒せ
0186デフォルトの名無しさん2009/11/03(火) 11:15:02
バッチファイルの作成を自動化できないものかと思い、eruby がつかえそうだと思いました。

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

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

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

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


0187デフォルトの名無しさん2009/11/03(火) 11:17:47
つか $stdout なら write すべきだと思うんだが
$stdout が指してるオブジェクトに puts というインスタンスメソッドが定義されてる可能性はそれほど高くない
0188デフォルトの名無しさん2009/11/03(火) 11:20:47
>>186
文字列なんだから String のマニュアルをダメもとで読め
ttp://www.ruby-lang.org/ja/man/html/String.html#ljust
0189デフォルトの名無しさん2009/11/03(火) 11:30:54
>>187
それはputsに応答しないオブジェクトを$stdoutに入れたヤツが悪くないか?
STDOUTがIOのインスタンスなんだし、IOやそのサブクラスのインスタンスであるか
相応のduck typingができることを期待するのは当然だと

実際に期待できない例にはどんなのがある?
0190デフォルトの名無しさん2009/11/03(火) 11:46:20
$stdoutっていずれ廃止になるんだろ?
なるべく使わない方がいいんじゃねーの
0191デフォルトの名無しさん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
0192デフォルトの名無しさん2009/11/03(火) 11:49:05
>>190
廃止された$defoutと混同してないか?
0193デフォルトの名無しさん2009/11/03(火) 12:24:41
>>190が代わりに何を使う気だったのかがちょっと気になる
01941822009/11/03(火) 18:12:54
たくさんのレスありがとうございます。勉強になりました。
公式も見てみましたが、
単にputsとした場合はKernelモジュールのputsを指し、
そのputsはデフォルトで$stdoutに対して出力をするようですね。
やっぱり冗長なだけなようですね。

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

具体的には、「JavaプログラマのためのRuby入門」という本の初っ端の例文が
$stdout.puts 'hello world !'.upcase
となっていました。
著者のartonさんはコミッタですよね?
01951822009/11/03(火) 18:13:57
>>187ではなく>>185でした。すいません。
0196デフォルトの名無しさん2009/11/03(火) 18:16:55
>>194
それはJavaのSystem.out.printlnになじんだ者が類推しやすいように
そう書いてあるんじゃあないか?
01971822009/11/03(火) 18:36:50
おおなるほど、そういうことだったのかな…。
0198デフォルトの名無しさん2009/11/03(火) 19:36:32
その本は読んでないけど、読んだ者が混乱するような記述なら困りものだな
後ろの章を読めばわかるのかなとは思うけど
0199デフォルトの名無しさん2009/11/03(火) 20:34:50
モジュールの場所を知るコマンドはありますか?
perlでいう perldoc -l のような。
0200デフォルトの名無しさん2009/11/03(火) 20:55:12
>>199
ri
refe
他にもなんかあったような気がするけど忘れた
0201デフォルトの名無しさん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 …のどこだっけ」と試行錯誤するのは面倒
0202デフォルトの名無しさん2009/11/03(火) 21:23:14
>>199
gem whichはgem以外にも使えたはず
0203デフォルトの名無しさん2009/11/03(火) 21:44:58
ほんとだ知らなかった
いいこときいた
0204デフォルトの名無しさん2009/11/03(火) 21:54:21
$ gem which uri
/usr/lib/ruby/1.8/uri.rb

ほほう

String とか Regexp とか rb のファイルになってないものは駄目っぽいな
0205デフォルトの名無しさん2009/11/03(火) 22:11:29
>>200-202
あざっす。
0206デフォルトの名無しさん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
0207デフォルトの名無しさん2009/11/04(水) 08:30:58
>>186
>と定義して、行の末尾の '*' の位置を変えないことってできますか?

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

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

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

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

ただ入門書やネットに転がってるサンプルなどを見ると大抵ダブルクウォーテーションのようです。
CやJavaなどの習慣でダブルを使う人が多いのでしょうか?あるいは他にメリットがあったりしますか?
0210デフォルトの名無しさん2009/11/04(水) 10:13:32
そもそもとして、" " でも ' ' でも処理負荷的にはたいして変わらない
文字列を数まんことか大量に使用すれば若干違うかもしれんが、たぶん他の部分チューニングしたほうが速い

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

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

'hello\nworld' と書いてそのまま \n が表示されて「ん?」となるのは一度や二度ではない
0211デフォルトの名無しさん2009/11/04(水) 10:27:08
俺は両方使い分けてるな
別にダブルクォートで統一してもいいとは思うんだけど
最近、なんとなくシングルクォートの方がきれいに見えるようになった
あとシングルクォートだと「ここでは変数展開をしません」という宣言にもなる
02122092009/11/04(水) 10:28:08
>>210
おおなるほど…分かりやすい説明ありがとうございます。
それだけ例を示されると確かにダブルクウォーテーションのほうが理にかなってますね。
0213デフォルトの名無しさん2009/11/04(水) 10:29:56
>>211
ダブルクォートを最終的にシングルクォートに書き換えることはよくある
それはやっぱり意思表示だな
02142092009/11/04(水) 10:32:10
>>211
ありがとうございます。

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

どっちも使ってる…。どういう基準で分けてるのかさっぱり分からない。
ただ適当なのか、何かちゃんとした理由があるのかな。
0216デフォルトの名無しさん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"] ←この部分をコピペ

深い意味は何もない
打ってる途中で
「あーシングルクォートでよかったなーと思ったが修正面倒なのでこのままダブルで閉じる未来の俺訂正よろしく」
とか普通なので気にしてたら禿げるぞ
0217デフォルトの名無しさん2009/11/04(水) 11:08:33
String#inspect が吐く文字列がダブルクオートというのは意外と
強い動機になるよね。
0218デフォルトの名無しさん2009/11/04(水) 14:10:01
>>209
>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。

このルールでいいと思う。あとは ¥n をいれるときとか。
0219デフォルトの名無しさん2009/11/04(水) 18:36:31
そのルールに何の意味も無いだろ
面倒だし両方の表記が入り乱れることになるだけ
なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
0220デフォルトの名無しさん2009/11/04(水) 18:48:35
変数(というか、式)展開やバックスラッシュ記法の有効化は、すこし機能が強すぎる
その機能を使用しないのなら、そもそも機能が有効になっていないほうが好ましい

めんどいからダブルでいーじゃん、というのでももちろん構わないし
スクリプトに直接リテラルで書くぶんには実際上の問題は何もないが、
慎重にシングルとダブルを使い分けるという姿勢は賞賛されるべき
0221デフォルトの名無しさん2009/11/04(水) 18:51:52
>>219
>なんでダブルクウォーテーションだけで済ませるのが嫌なんだ?
べつに嫌いとまでだれも言ってないけど。>>213が書いたように、シングルクォートを使うことで、
式展開もなにもありませんという意思表示をしているだけ。
なんでこんな曲解するやつがいるんだろうね。
0222デフォルトの名無しさん2009/11/04(水) 20:03:43
Railsマンセーな俺は>>215>>216辺りを見てシングルを主に使っていこうと決めた
アトリビュートというかシンボルに置き換えられるのようなケースではダブルを使ってる気がする
0223デフォルトの名無しさん2009/11/04(水) 21:01:01
Windows環境だとパス区切りがバックスラッシュな関係で
文字としてのバックスラッシュを扱いたい場合は多いな
>>210 とは逆に、バックスラッシュが解釈されるせいで「ん?」と思う場面のが多い
0224デフォルトの名無しさん2009/11/04(水) 21:19:40
考え方は>>220に同感だけど、職場ではダブルクォートで統一されてる。
ネットで拾うサンプルも大抵ダブルクォートだ。
単純に、ダブルクォートで文字列を表現する言語が多いという理由だけの気がする。
コーディングスタイルにおいて慣習ってのは大きな要素なんじゃないかな。
○○にすべきだ、という100%正しい解釈があったとしてもそれが慣習に反していれば採用するのはやっぱり難しい。
0225デフォルトの名無しさん2009/11/04(水) 21:30:24
100%正しい解釈などない
0226デフォルトの名無しさん2009/11/04(水) 21:31:39
>あったとしても
0227デフォルトの名無しさん2009/11/04(水) 21:34:04
信念を持って慣習を破るのは悪いことじゃないな。
0228デフォルトの名無しさん2009/11/04(水) 21:34:12
Rubyの場合%表記使うことも多いからダブルクォートに対するこだわりなんか全くない
0229デフォルトの名無しさん2009/11/04(水) 21:34:35
無意味な仮定ってことだろ
0230デフォルトの名無しさん2009/11/04(水) 22:10:31
> 慣習
こないだ '%s' % str したらMatzの写真で踏み絵させられた
わかる人にはわかるらしい

ちなみに初めてのRuby的には
「後述のエスケープ文字や式展開を含まない場合、
一重/二重のどちらの引用符を用いるかは好みの問題です」(p.58)
だって
0231デフォルトの名無しさん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)

というエラーが発生します。
ドライバが見つからないと言うようなエラーだと思うんですが、全部最新です。
何が原因でしょうか?
0232デフォルトの名無しさん2009/11/04(水) 23:50:35
ドライバを入れろ
0233デフォルトの名無しさん2009/11/05(木) 00:06:05
>>231
×SQLite3
○sqlite3
db = DBI.connect("DBI:sqlite3:#{filename}")
0234デフォルトの名無しさん2009/11/05(木) 00:44:56
>>231
ごめん>>233は間違い
うちは
db = DBI.connect("DBI:SQLite3:test.db")
で接続できた
ドライバはdbd-sqlite3で Unable to load driver だから
sqlite3自体がインストールされてない?
0235デフォルトの名無しさん2009/11/05(木) 02:13:52
>>209
>個人的にはシングルクォートをメインにして、"my name is #{name}"のような変数展開を使う場合のみダブルクォーテーションにしています。
>というのもHTMLと一緒にrubyを使うことが多く、HTMLタグの値にダブルクォーテーションを使うからです。

正解
0236デフォルトの名無しさん2009/11/05(木) 04:09:19
%!hogehoge! 使うべさ
0237デフォルトの名無しさん2009/11/05(木) 06:34:11
俺はハッシュの値とかも含めて基本全てシングル使ってるぞ
変数展開したい時だけダブル
これで特に困ったことは無い
空文字が''になるので、他人にソース見せる時に突っ込まれることはあるが。
0238デフォルトの名無しさん2009/11/05(木) 08:22:34
ダミアン先生によると空文字は、%{}にしたほうがわかりやすいと
0239デフォルトの名無しさん2009/11/05(木) 08:36:12
まあ''と"と"'と'''と''''と'"'と""と'"'と'''''の区別は咄嗟にはつけにくいからな
いちばんわかりやすいのは String.new だが

余談だが俺は配列も Array.new だしハッシュも Hash.new だ
自分から [] や {} を使うことはゼロ
02402312009/11/05(木) 08:39:55
>>232
>>231に書いた以外に必要なドライバがあれば
ドライバ名を教えてください。

>>234
一応 gem search を実行すると全部インストールされているんですが
sqlite3-ruby をインストールするときにリンク先のような状態になったのが
気になりました。
ttp://www.rubylife.jp/railsinstall/other/index1.html
そのほかはバージョンもそろえてるしSQLite3の本体も入ってるし、
もうどうすればいいのか・・・
0241デフォルトの名無しさん2009/11/05(木) 08:51:14
新しく配列作る時って Array.new と [] って一般的にどっちがいいとかある?
好みの問題くらいでどっちでもいい?
0242デフォルトの名無しさん2009/11/05(木) 09:12:05
初期値の存在しないふつうの空の配列を作るならどっちでもよい

10万個くらい Array.new と [] が書いてあったら、後者のほうがパース完了は遅いとは思うが
0243デフォルトの名無しさん2009/11/05(木) 09:23:13
>>240
DBI.available_driversで使えるドライバがわかる
そこに"dbi:SQLite3:"が無ければインストールに失敗してる
0244デフォルトの名無しさん2009/11/05(木) 10:06:41
初期値が無い場合は
var = Array.new
初期値がある場合は
var = ["hoge", "hogege"]
って感じだな。
特に理由は無いけどこういうパターンで書く人が多い気がする。
0245デフォルトの名無しさん2009/11/05(木) 10:13:01
[] でいいじゃん
0246デフォルトの名無しさん2009/11/05(木) 10:36:36
 
0247デフォルトの名無しさん2009/11/05(木) 14:25:20
Array.new, Hash.new はメソッド呼び出しが入るので遅い。
0248デフォルトの名無しさん2009/11/05(木) 15:03:37
>>244
そうかあ?初期値がなくても [] と {} を使うほうが多いと思うけど。
デフォルトの初期値が必要な場合だけHash.newとかを使うんじゃないか。
0249デフォルトの名無しさん2009/11/05(木) 16:51:24
配列からある値を一つだけ削除って簡単にできる?
- とかdeleteだと複数あった時に全部消えちゃう
0250デフォルトの名無しさん2009/11/05(木) 16:58:30
delete_at
0251デフォルトの名無しさん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"]
02522312009/11/05(木) 18:21:11
>>243
driver = DBI.available_driversしてみました

ArrayEmptyでした orz=3

一度アンインストールしてインストールし直しても同じです
どうやればインストール成功するんでしょうか(´;∀;)
02532492009/11/05(木) 18:50:35
>>250,251
なるほどね見つけてから_atで消すのね
ありがとう
02542312009/11/05(木) 19:19:05
sqlite3-ruby dbi dbd-sqlite のバージョンを下げたりしてみたけど
やっぱりドライバが認識されませんでした
同じコードとドライバでも1.9.1だと動きまする・・・
0255デフォルトの名無しさん2009/11/05(木) 19:24:01
インストール手順を示さないとアドバイスしようがないと思ふ
02562312009/11/05(木) 20:05:44
解決しました。いや、解決はしてませんが、ドライバが原因では無いことはわかりました。
NetBeans6.7.1でデバッグをすると「ドライバがないぞゴルァ」って言われるんですが
コンソールから実行すると何事もなかったように動きます。

どうもお騒がせしました。
0257デフォルトの名無しさん2009/11/05(木) 21:30:32
えええええw
0258デフォルトの名無しさん2009/11/05(木) 22:32:30
コンソールから使ってるRubyとNetBeansから使ってるRuby
が違うんでないかい?
02592312009/11/05(木) 22:41:01
>>258
自分もそう思って確認したんですが
インストールされてるバージョンは1.8.7-p72と1.9.1-p243の二つしかなく
コンソールもねとびーんも1.8.7-p72を使ってました。
ねとびーんのGemマネージャにも、きちんとドライバは登録されていました。
その後も色々試していますが、未だに原因がわかりませんです。
0260デフォルトの名無しさん2009/11/06(金) 01:03:10
printf("%d %d\n", n, n+1)の出力にマッチする正規表現は書けますか?
0261デフォルトの名無しさん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
0262デフォルトの名無しさん2009/11/06(金) 01:40:43
>>261
s = '%d %d\n'
p /#{s}/ # /%d %d\n/と等価

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

似たような話としては、String#gsubで引数に\を渡そうとすると
ダブルクォートの場合はエスケープの都合で\の個数がキモいことになる
0263デフォルトの名無しさん2009/11/06(金) 02:17:32
>>262
サンクス。完全に間違って理解してた
> 文字列として\nが解釈されなくても、正規表現をパースする段階で解釈される
よく覚えとくよ

で、>>261でなんではまったかと思ったら普段あまり使わないRegexp.new使ってるからだった
'\n' にマッチする正規表現をリテラルで作ろうとしたら /\\n/ って直感的に書けるけど
Regexp.new で作ろうとすると相当キモイことになるね
0264デフォルトの名無しさん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
と出ていました。
0265デフォルトの名無しさん2009/11/06(金) 06:38:37
じゃあ/home/hogehoge/bin/gem18って打ち込めば
02662602009/11/06(金) 08:02:12
>>261
動的でもいいんですがnの値は不明です。
一旦nを求めて式展開するしかないでしょうか?
一回で
line =~ /(\d+) #{\1.to_i + 1}/
みたいには書けない?
0267デフォルトの名無しさん2009/11/06(金) 08:08:12
実効上のご利益がないのでどうでもいいのだが正規表現を先に書いてくれると嬉しい

/re/ =~ str
0268デフォルトの名無しさん2009/11/06(金) 08:22:50
>>264
PATHの設定。
0269デフォルトの名無しさん2009/11/06(金) 08:23:59
それと、 gem じゃなくて gem18 と入れることか。
0270デフォルトの名無しさん2009/11/06(金) 08:29:54
>>264に足りないのは(PC-)UNIXの知識だな
Ruby関係ないシリーズの筆頭だ

はいそこさくらが使ってるFreeBSDがUNIX4文字で包括されうるかどうか議論しない
0271デフォルトの名無しさん2009/11/06(金) 08:32:18
ruby2.0はいつ出るのじゃ
0272デフォルトの名無しさん2009/11/06(金) 08:35:10
>>271
その質問には意味がない
0273デフォルトの名無しさん2009/11/06(金) 08:43:54
新しいバージョンを待つ香具師は、そのバージョンが出たら
その次のバージョンを待つことになる。

0274デフォルトの名無しさん2009/11/06(金) 10:46:28
1.9もまだ満足に移行出来てない状況でw
0275デフォルトの名無しさん2009/11/06(金) 11:09:59
2.0になった場合の変更予定点とかってもう案があったりするの?
0276デフォルトの名無しさん2009/11/06(金) 12:45:25
>>275
それこそ1.8の出る前からある。
0277デフォルトの名無しさん2009/11/06(金) 16:43:52
だから待ち焦がれてる椰子が多いんだよ。
Ruby2.0が出たらそのサブセットをどっかで標準化したりするのかね。
0278デフォルトの名無しさん2009/11/06(金) 18:15:47
2.0はこうなる!
みたいな解説どっかにある?
0279デフォルトの名無しさん2009/11/06(金) 19:26:11
ないでもないけど(Ruby Riteで検索すれといくつか)大昔のものなので、
1.9で実現しちゃったもの(YARVとか)もあれば、方針転換があったりしたものが
(たとえば括弧の省略があまりできなくなる方向で動いてたのを、断念しちゃったり)
あったり、全く刷新の気配もないもの(GCとか)とかで、全然参考にならない。
02802312009/11/06(金) 19:33:23
必要ないかも知れないですが経過報告です。

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

もし上の環境でDBI経由でSQLite3が使えてる人がいたらアドバイスください。
0281デフォルトの名無しさん2009/11/06(金) 19:50:20
txt = open('hoge.txt').read

ってするとオープンされたファイルのストリームは開いたままですか?
0282デフォルトの名無しさん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 等クラスメソッド)はブロック作らなくても安全

クラスメソッドは「便利メソッド」として作られてることが多い
0283デフォルトの名無しさん2009/11/06(金) 20:05:12
>>281
GCされるかスクリプトが終了するまで開いたまま
ちゃんと閉じるか閉じてくれる書き方をするクセをつけたほうがいい

手っ取り早いのはこれ
txt = File.read('hoge.txt')
本当はIO.read、ただし1.9系じゃないとこの方法でbフラグ付けるのは無理
0284デフォルトの名無しさん2009/11/06(金) 22:39:33
IO.binreadは1.9だっけか
0285デフォルトの名無しさん2009/11/07(土) 01:20:25
String::squeezeの使い道が分からない
0286デフォルトの名無しさん2009/11/07(土) 02:19:12
1.9はvistaの様に飛ばして、2.0のsp2が出るまで1.8で耐えた方が良さそうw
0287デフォルトの名無しさん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に加えればいいのでしょうか?

長くなってすいません。
0288デフォルトの名無しさん2009/11/07(土) 16:37:36
Rubyで外部コマンドを単純に実行したいときで質問。
変数hogeにデータが入っていてこれを引数としてコマンドを実行したい。

system("command", hoge)

なら安全?
例えば、パイプでつなげられてrm -rfされる心配はないか、とか。
0289デフォルトの名無しさん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 を返しています
0290デフォルトの名無しさん2009/11/07(土) 16:55:35
>>289
ありがとう。
0291デフォルトの名無しさん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 を文字列に変換することは出来ているのに上記のようなエラーが出る理由が分かりません。
教えてください。
0292デフォルトの名無しさん2009/11/08(日) 10:23:14
Rubyは、その種の暗黙の変換はしないので、

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

0293デフォルトの名無しさん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 … 安定版
とされたということ
0294デフォルトの名無しさん2009/11/08(日) 15:19:36
じゃあ、1.9.1は2.0ってことですか
0295デフォルトの名無しさん2009/11/08(日) 15:23:13
matzを罵ってやる!
0296デフォルトの名無しさん2009/11/08(日) 15:28:41
Rubyでは、2.0は人参と呼ばれている。
「開発者のモチベーションを引っ張り続けるが到達できないもの」
来世紀くらいには追いつけるかもしれないがユーザーが待つのは馬鹿。
0297デフォルトの名無しさん2009/11/08(日) 15:46:26
まあ10年くらいしたらなんとかなんじゃねえの、とは思う
少なくとも5年では無理
0298デフォルトの名無しさん2009/11/08(日) 15:47:49
なにが人参だか。どうでもいいわ
0299デフォルトの名無しさん2009/11/08(日) 16:01:55
RubyにはRubyしか知らない人が多いというのはやっぱり真実なのだと思う
ようはPerl6と同じことだろ
0300デフォルトの名無しさん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?("キターーーー")
0301デフォルトの名無しさん2009/11/08(日) 16:23:36
PHP6、Perl6、Ruby2のうち一番早くリリースするのはどれですか?
0302デフォルトの名無しさん2009/11/08(日) 16:48:32
やっぱり1.9sp2まで待ちだな。
0303ダーク藤本 ◆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
0304デフォルトの名無しさん2009/11/08(日) 17:29:27
Rubyの多次元配列?
それなんていうライブラリ?
0305デフォルトの名無しさん2009/11/08(日) 17:42:01
ruby 1.9.3あたりが安定版になっても俺は驚かない
驚かないが、「またユーザーを混乱させるのか・・・」と思う
0306デフォルトの名無しさん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 でもあったが、なかなか酷い
0307デフォルトの名無しさん2009/11/08(日) 17:57:08
驚き最小の法則w
0308デフォルトの名無しさん2009/11/08(日) 17:59:44
>>307
情報の古いうっかりさんこんばんは
0309デフォルトの名無しさん2009/11/08(日) 18:01:51
http://ja.wikipedia.org/wiki/驚き最小の原則
結城浩は1996年、この原則を人間関係を円滑にすすめるための心得に拡張し、「驚き、最小の法則」として紹介した。
たとえば、プログラムを顧客に納品する際に、判明しているバグがあるのなら、それを伝えておいたほうが顧客に
とっても利用時の戦略を立てやすくなる、といったものである。「『どうしようかな?』と思ったときには、 相手の
『驚き』を最小にするような選択をすべき」であるという[1]。

プログラミング言語 Ruby は、一時期「驚き最小の原則」とともに語られることが多かった。ただし、作者のまつもと
ゆきひろはこの原則を Ruby の設計哲学として採用したことはないと述べている[2]。Ruby については、「さまざまな
バックグラウンドの人々すべてを驚かせないことではなく、Ruby のやり方に十分に慣れた人が持つ常識が一貫して通用
するという意味」[3][4]であるとして、「Matzの驚き最小の原則」という言い方も提案された[3]。現在では Ruby が
「驚き最小の原則」とともに語られることは少なくなっている[5]。
0310デフォルトの名無しさん2009/11/08(日) 18:04:35
驚きの連続w
0311デフォルトの名無しさん2009/11/08(日) 18:09:19
>>309
コミュニティ内では「Rubyらしい動作」という言葉で語られる概念だな
Rubyらしい動作をするクラスやメソッドは推測が利いて使いやすい、という程度の意味
0312デフォルトの名無しさん2009/11/08(日) 18:10:14
一時期のruby-talkとかひどかったもんな。

いろんな言語バックグラウンドを持つ香具師が、想定外の挙動に対して
「これは驚き最小に反している!」
そして「おめーにとってはそうだろうがよ」と総ツッコミ。
03133052009/11/08(日) 18:19:50
>>306
説明ありがとう! 1.9.1からルールが完全に変わったんだな

> ruby 2.0.0 は 2.0 系列の開発版
そうなるのか? ruby 2.0.0 からまた元のルールに戻るとかじゃなくて?
そうなるんだとすると、本当に訳が分からなくなりそうだ
0314デフォルトの名無しさん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 だかが奇数のときは開発版で偶数は安定版、みたいな
冷静に考えるとへんてこなルールと実質上は何も変わらない
0315デフォルトの名無しさん2009/11/08(日) 18:32:54
>>314
ソース求む。

どこにもそんな話、なかったと思うんだが。
0316デフォルトの名無しさん2009/11/08(日) 18:46:28
ruby 1.9.3あたりが安定版になっても俺は驚かない
驚かないが、「またユーザーを混乱させるのか・・・」と思う
0317デフォルトの名無しさん2009/11/09(月) 00:40:14
順調に迷走してるね、この言語。
0318デフォルトの名無しさん2009/11/09(月) 01:17:13
迷走してるのはおまえの脳みそだろw
0319デフォルトの名無しさん2009/11/09(月) 02:02:57
すくなくとも驚き最小の原則を標榜している言語が
脳みそを掻き回したらいかんだろ
0320デフォルトの名無しさん2009/11/09(月) 02:09:56
>>319
Rubyのことなら、標榜してないよ。
0321デフォルトの名無しさん2009/11/09(月) 02:13:44
よそから飛んできたんでひょっとしたら320は空気が読めてなかったかもしれない
0322デフォルトの名無しさん2009/11/09(月) 02:18:43
ruby厨WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
0323デフォルトの名無しさん2009/11/09(月) 08:23:38
一時期のRuby厨が荒らしてたPythonスレみたいになってるw
0324デフォルトの名無しさん2009/11/09(月) 09:33:42
2.0が出てもみんな1.8.7を使いつづけるというオチでは?
0325デフォルトの名無しさん2009/11/09(月) 09:44:20
そこはJRubyでしょ
0326デフォルトの名無しさん2009/11/09(月) 11:24:20
C言語みたいにクラス定義を別ファイルに書きたいのですが
#include "MyClass.h"
に相当するRubyの命令がわかりません。
手持ちの本にも載っていません。
誰か教えてください。
0327デフォルトの名無しさん2009/11/09(月) 11:27:40
require
0328デフォルトの名無しさん2009/11/09(月) 18:12:07
>>326
require "myclass" # myclass.rb を読み込む
0329デフォルトの名無しさん2009/11/09(月) 19:50:19
この言語って他の言語にある程度慣れてる人が多い?
プログラミングはRubyからです!って人は少なそう。
0330デフォルトの名無しさん2009/11/09(月) 20:01:19
>>329
Ruby から始めましたが。
理由は、基本的な構文はどの言語も似ていると思ったので...
0331デフォルトの名無しさん2009/11/09(月) 20:27:41
VBA → ちょっとだけJavaScript → VB.NET → C# → Ruby
0332デフォルトの名無しさん2009/11/09(月) 21:14:56
rubyから始めましたってのはニート出身のPGとかだけだろ
学歴ある奴はあり得ん
03333302009/11/09(月) 21:19:51
>>332
大学で始めてプログラミングやった子なのかな?(^^;
0334デフォルトの名無しさん2009/11/09(月) 21:20:44
>>332
なにその根拠のない自信?ホントにプログラマ?
0335デフォルトの名無しさん2009/11/09(月) 21:21:53
>>332
ム板池よITドカタ
0336デフォルトの名無しさん2009/11/09(月) 21:21:59
おまいら釣られすぎですよ
0337デフォルトの名無しさん2009/11/09(月) 21:56:53
マジレスすると大学で覚えるプログラミングなんて大したことなくね?
いいとこの大学でもC言語を基礎から教えてたりするわけだし、そんな状態から4年間での伸びしろなんてたかが知れてる。
その周りの専門知識は大学じゃないと勉強するのは難しいかもだけど、実務で生かせてる知識がどれほどあるか。、
自分の大学生活が薄っぺらかっただけなのかな?
中卒高卒でも小さい頃から趣味でプログラミングやってた奴らには勝てる気がしないんですよ。
なんというか、雑学というか知識の幅というか、そこら辺が埋めようの無い差を感じる。
0338デフォルトの名無しさん2009/11/09(月) 22:01:57
安心しろ、ラジオを分解すらしたことがなくても
電気電子系の学科に進学する、という人が増えている。

今はそういう時代。
0339デフォルトの名無しさん2009/11/09(月) 22:02:52
モチベーションの差とかもあるかな
大学出てない奴は少なからず劣等感を持ってると思う
うちの会社に大学中退者が何人かいるんだが彼らのハングリー精神は恐れ入るよ
0340デフォルトの名無しさん2009/11/09(月) 22:28:33
>>337
小さい頃からプログラミング続けてる人はベースが完璧にできあがってるし
そういう基礎的な部分で苦労しない分、応用とか開発にリソース使えるんだろうね
0341デフォルトの名無しさん2009/11/10(火) 01:15:40
小さい頃からプログラムやってる人はうらやましいね。
田舎だとそういう情報もハードも少なくて外で走り回ってるくらいだったよ。
その年頃でマイコンとかやってる奴とかいるかと思うと・・・。
まだ、勉強し続けなきゃならないな
0342デフォルトの名無しさん2009/11/10(火) 02:17:28
あとは環境かねぇ。
親の環境次第で当時、高価なPCを買えたかどうかとか。
0343デフォルトの名無しさん2009/11/10(火) 03:48:57
子供の頃、親が遊びに投資してくれたかどうかで
将来がだいぶ変わるよな
ゲームばっかすんなとか言うけど
そこからプログラムに入れば職業につながる可能性だってあるんだしね

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

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

>>342
今は高価な PCじゃなくても、そこそこの性能で
今の子供はうらやましいよね
0344デフォルトの名無しさん2009/11/10(火) 05:24:12
そう言われてみれば、消防ん時からプログラミングやってる俺は
親がオーバークロックとか日常茶飯事な自作erだなあ

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

ま、結局それはあんまり肌に合わなくて
PCじゃなく、ソフトウェアを組む方にハマったんだが
0345デフォルトの名無しさん2009/11/10(火) 05:52:33
今の子供は羨ましくもあるが、
ネットも無く毎日外で秘密基地とか作って遊んでた自分の小学生時代はこれはこれで良かったと思ってる。
0346デフォルトの名無しさん2009/11/10(火) 06:23:59
一方小学生の>>344はアメリカの某サーバにバックドアを仕掛けた
0347デフォルトの名無しさん2009/11/10(火) 08:38:29
25までニートやってた俺はお前らには無いエナジーで溢れてる
俺の人生はこれからだ
0348デフォルトの名無しさん2009/11/10(火) 09:22:42
プログラミングなんて義務教育終わる前に覚えとくもんだろう

ところで、最近は東大の教養課程でruby教えてるそうなので、
rubyでプログラミングを始めた高学歴というのは普通にいるんじゃね?
0349デフォルトの名無しさん2009/11/10(火) 12:17:41
>>348
一行目と三行目以下の矛盾がひどいなオイ
0350デフォルトの名無しさん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はコンパイラを分離したほうがよくね?
0351デフォルトの名無しさん2009/11/10(火) 12:34:46
1.9って高速化されるんじゃなかったの?
0352デフォルトの名無しさん2009/11/10(火) 12:35:29
×rubyの起動時間
○ mswin32版ruby経由のwxRubyの起動時間
0353デフォルトの名無しさん2009/11/10(火) 13:22:48
>>349
べき論と現実とは普通に食い違ってるもんじゃないか
0354デフォルトの名無しさん2009/11/10(火) 13:26:29
NACLの瀬崎さんという女性はかわいいって本当ですか?
0355デフォルトの名無しさん2009/11/10(火) 13:32:43
初心者はそんな質問しません
0356デフォルトの名無しさん2009/11/10(火) 13:42:12
>>352
wxRubyはライブラリです。起動などしませんとか文句が出そう
0357デフォルトの名無しさん2009/11/10(火) 14:01:28
>>354
こんなん見つけました
ttp://luck.linux.or.jp/esokai/esokai2.html
0358デフォルトの名無しさん2009/11/10(火) 14:15:48
>>353
>>348一行目の書き方だと、べき論じゃなく常識を語ってるようにしか読めん
0359デフォルトの名無しさん2009/11/10(火) 14:22:24
学校教育と義務教育がごっちゃになってるようにしか読めなかった
0360デフォルトの名無しさん2009/11/10(火) 14:37:26
学歴話はスレ違い
0361デフォルトの名無しさん2009/11/10(火) 14:46:29
>>360
学歴の話なんて誰もしてねーよ
0362デフォルトの名無しさん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
0363デフォルトの名無しさん2009/11/10(火) 16:13:51
じっくり見てないけど、nilで判定するとnilを初期値に指定できなくなるから、
*argsで受けてsizeをチェックしたほうがいいんじゃない?
0364デフォルトの名無しさん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とかシラネ
0365デフォルトの名無しさん2009/11/10(火) 16:31:10
ミスった、最初にこれやっといて
e = each
0366デフォルトの名無しさん2009/11/10(火) 16:44:50
Rubinius の Enumerable のコードは参考になるかなぁ、と思った。
ttp://github.com/evanphx/rubinius/blob/master/kernel/common/enumerable.rb

うーん、微妙。
0367デフォルトの名無しさん2009/11/10(火) 19:00:10
>>341
子どもの頃におやじが道楽でAppleII買ったんでその内蔵BASICで遊んだなあ
おやじは死んじゃったけどAppleIIはまだ置いてあるや
0368デフォルトの名無しさん2009/11/10(火) 20:51:01
Ruby歴三日の初心者です。
関数呼び出しでかっこつけてますか?
どちらのスタイルで書いた方が良いでしょうか?
0369デフォルトの名無しさん2009/11/10(火) 20:54:02
print と puts と p 以外のメソッドはとりあえず括弧をつける
括弧を外すことはいつでもできるのだから、括弧ありで確実な動作を把握するべき
0370デフォルトの名無しさん2009/11/10(火) 21:00:32
その三つだけ例外扱いすることに筋が通らなくね?
返値を期待するなら括弧を付けろとか
0371デフォルトの名無しさん2009/11/10(火) 21:08:48
?がつくと、あまり括弧を付けたくない気持ちになる
0372デフォルトの名無しさん2009/11/10(火) 21:22:39
>>368
かっこいい、かっこ悪いで関数は呼び出すものじゃないと思います
0373デフォルトの名無しさん2009/11/10(火) 21:33:27
つまんね
0374デフォルトの名無しさん2009/11/10(火) 21:55:01
Railsのソースとか見るとカッコ省略がデフォだよね
0375デフォルトの名無しさん2009/11/10(火) 22:13:32
RailsはRubyではない
0376デフォルトの名無しさん2009/11/10(火) 22:16:10
RailsはRubyだろ
RubyはRailsではないが
0377デフォルトの名無しさん2009/11/10(火) 22:52:49
アホを相手にするな
0378デフォルトの名無しさん2009/11/10(火) 23:01:39
rorに成れると、rubyらしく描けなく成るからなw
0379デフォルトの名無しさん2009/11/10(火) 23:02:53
Rails は Ruby 1.a.h.o
0380デフォルトの名無しさん2009/11/11(水) 09:46:51
Rails慣れてくると、引数はHashじゃなきゃいけなく感じてくる('A`)
0381デフォルトの名無しさん2009/11/11(水) 09:57:29
Railsは意図的にDSL的な書き方を要求してるから括弧省略例が多くなるんでしょ。
0382デフォルトの名無しさん2009/11/11(水) 10:02:27
括弧ないとき人間がソース読み書きするにあたって
メソッドとプロパティの区別ってどうやって判断するの?
0383デフォルトの名無しさん2009/11/11(水) 10:17:42
メソッドのときは::で書けばおk
0384デフォルトの名無しさん2009/11/11(水) 10:52:31
>>382
Rubyではそもそもメソッド/プロパティをあまり区別してない

>>383
オブジェクト指向言語で、メソッドを全部::にされるとすごく読みづらいと思う
ほとんどがメソッドの呼び出しだし
0385デフォルトの名無しさん2009/11/11(水) 11:19:09
アクセサは?
0386デフォルトの名無しさん2009/11/11(水) 11:41:57
rubyって仕様で完全にカプセル化されてるから基本的に全てメソッドじゃないの?
アクセサ定義してもプロパティに直接アクセスできるようになるわけじゃないし。
0387デフォルトの名無しさん2009/11/11(水) 22:42:18
というか、オブジェクトを操作するのに、
メソッドとプロパティを意識する必要はあまりないんじゃないの?
という思想があるような気がしないでもない。
0388デフォルトの名無しさん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
0389デフォルトの名無しさん2009/11/12(木) 00:11:51
自分で作ったrbへのパスを変数に入れて、そのrbのメソッドを実行するにはどうしたらいいですか?
path = "lib/hoge.rb" としたあと、hoge.rbのindexメソッドを呼ぶ感じです。
0390デフォルトの名無しさん2009/11/12(木) 00:12:54
require
0391デフォルトの名無しさん2009/11/12(木) 00:36:21
とりあえず、hoge.rbだけでいいなら、これでいけるんじゃない?
require File.dirname(__FILE__) + "/lib/hoge.rb"

lib以下に複数ファイルがあって全部読み込みたい場合は、
Dir.globと組み合わせればいいかと。
0392デフォルトの名無しさん2009/11/12(木) 00:55:05
>390-391
Dir.globを使って任意のパスにある複数のrbをrequireすることはできています。
が、任意のrbの任意のメソッドを呼ぶ方法が分かりません。
#{hoge}.index みたいな感じでしょうか。。
0393デフォルトの名無しさん2009/11/12(木) 01:14:20
>>392
そのindexがトップレベルに定義してあるメソッドなら無理
0394デフォルトの名無しさん2009/11/12(木) 01:19:57
>>392
うーん。
全部requireした時点でどのファイルか?なんて情報はなくなると思うし、
名前空間で区別すべきじゃないか?

とりあえず、hoge.rbにはこう書いておいて、Hoge.indexで呼び出せばいいんじゃないの?
module Hoge
 def self.index
 end
end
0395デフォルトの名無しさん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の中で環境変数などからディスパッチしようとしています。
ので上記のようなことを考えたのですが、もっとスマートな方法はありますか?
0396デフォルトの名無しさん2009/11/12(木) 01:49:08
それでいいよ
0397デフォルトの名無しさん2009/11/12(木) 01:53:18
車輪の再発明だけどな
0398デフォルトの名無しさん2009/11/12(木) 02:07:02
>>388
引数に関数呼び出しのコードを書くのが間違ってる
0399デフォルトの名無しさん2009/11/12(木) 02:17:01
>>398
意味不明。正しい用法なるものがあるんなら、コードの具体例を。
0400デフォルトの名無しさん2009/11/12(木) 02:18:07
>>395
require毎にインスタンスを作っておく、じゃNGか?
0401デフォルトの名無しさん2009/11/12(木) 08:11:03
>>398
他の言語だとコード簡略化の為によくある手法だが
Rubyは御法度なのか、勉強になった。
0402デフォルトの名無しさん2009/11/12(木) 08:38:52
引数の呼び出し順番は処理系によって不定とかいう言語から来た人かと思った。
Rubyは決まってるよな?
0403デフォルトの名無しさん2009/11/12(木) 08:41:00
どなたか、:: と . の違いについてのコピペをキボンヌしてくださる方はいらっしゃいませんか?

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

つか、テンプレに入れとけ・・・
0404デフォルトの名無しさん2009/11/12(木) 08:43:50
>>402
Rubyの場合は、実装が仕様です。

>>403
じゃあ、キボンヌ
0405デフォルトの名無しさん2009/11/12(木) 08:46:55
>>403
class::method
instance.method
0406デフォルトの名無しさん2009/11/12(木) 09:03:14
>>401
398の主張の理由はわからんけど、別にRubyでも御法度ではないよ
むしろ積極的に使われてるぐらいのはず
0407デフォルトの名無しさん2009/11/12(木) 09:04:55
>>403
定数やモジュール、クラスを指定するなら Foo::Constant
メソッドを呼び出すなら instance.method

たまに Foo::method という記述も見かけるが、あまり一般的ではない
0408デフォルトの名無しさん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
0409デフォルトの名無しさん2009/11/12(木) 10:04:04
C言語のmax関数をRubyで書くとどうなりますか?

a = max 0, a-1

が通りません。
0410デフォルトの名無しさん2009/11/12(木) 10:31:56
関数のポインタ呼び出しはできますか?
0411デフォルトの名無しさん2009/11/12(木) 10:52:00
>>409
Enumerable#max

>>410
関数ポインタなんて無いから下から好きなの選べ
Object#method
Object#send
Kernel#proc Kernel#lambda Proc
0412デフォルトの名無しさん2009/11/12(木) 11:05:47
あんまりないけど、レシーバが確定していないなら
Module#instance_methodしておいて後からUnboundMethod#bindというのもあるね
0413デフォルトの名無しさん2009/11/12(木) 15:13:22
>>409
411の回答に優しさを感じなかったから回答してみると、
a = [0, a-1].max
0414デフォルトの名無しさん2009/11/12(木) 18:33:57
ret = `cmd`
で終了コードも知りたい場合どうやればいいですか?
0415デフォルトの名無しさん2009/11/12(木) 18:45:33
$?
0416デフォルトの名無しさん2009/11/12(木) 23:57:30
erbかhamlを、railsを使わずに素のrubyから使った場合に、layout機能を使うにはどうしたらいいですか?
0417デフォルトの名無しさん2009/11/13(金) 00:20:28
layoutはRailsの機能なんだが。
0418デフォルトの名無しさん2009/11/13(金) 00:22:02
>>417
どおりでいくらググっても情報が得られないわけですね…失礼しました。
0419デフォルトの名無しさん2009/11/13(金) 00:28:33
>>416
erb(レイアウト)の中でerbを使う
<%= inner_erb.result %>
0420デフォルトの名無しさん2009/11/13(金) 01:17:56
>>419
なるほど!しかし、こうなります。

hoge
<%= inner_erb.result %>
huga

これが

inner_erbのresult
huga

何か、<%= inner_erb.result %>より上の部分が消えます。
0421デフォルトの名無しさん2009/11/13(金) 01:28:24
>>420
ttp://www.ruby-lang.org/ja/man/html/erb.html#ERB.2enew
0422デフォルトの名無しさん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
0423デフォルトの名無しさん2009/11/13(金) 01:53:08
>>421
えーと…
>>422
やりたい事ができました、ありがとうございました。

それにしても、絶対必要だと思うんですが、何でlayout機能が標準装備されてないんでしょうかね。
0424デフォルトの名無しさん2009/11/13(金) 06:36:10
rubyだから
0425デフォルトの名無しさん2009/11/13(金) 06:37:12
>>423
おまえのためだけにRubyがあるんじゃねぇんだょ!
0426デフォルトの名無しさん2009/11/14(土) 04:13:56
>>423
rcsは何でプロジェクトのファイル全部を統括的にバージョン管理できないんでしょうかね、と言うようなものかと
svn使え、と。つまり、もっと上のものを使わないと。
この場合だと何らかのフレームワーク使えってことじゃないかな。
てか、RailsのActionViewってActiveRecordみたいに単体でつかえたっけ?
0427デフォルトの名無しさん2009/11/14(土) 04:53:51
そうね誕生石ならRubyなの
そんな言葉が頭に渦巻くよ
0428デフォルトの名無しさん2009/11/14(土) 05:21:22
今年もレコ大(死語)の季節だな
0429デフォルトの名無しさん2009/11/14(土) 05:45:49
puts 'hello'[0]
=> 104

この仕様が理解できませぬ。いや文字コードが出力されているという事実は理解できるんだけど
hを返さずに104を返すのは何故なのでしょう。
ruby熟練者にとっては、文字コードが返された方が都合いいのですか?
0430デフォルトの名無しさん2009/11/14(土) 07:12:11
1.9では文字列を返すように仕様が変わるという厄介者。
[0]ではなく[0,1]を使うようにするのがよいでしょうね
04314292009/11/14(土) 09:39:54
>>430
ありがとうございます。[0,1]でhが取り出せました。
1.9から変わったということはあまり意味の無い仕様だったのかな…早く1.9に乗り換えないとなぁ
0432デフォルトの名無しさん2009/11/14(土) 10:03:51
ゴルファーは ?d で 100 が得られなくなって嘆いているらしいな。
0433デフォルトの名無しさん2009/11/14(土) 10:05:25
部分文字列が整数なのはCから来てるんだろ
誤解は多いけど、意味のない仕様というわけでもない。

批判が多くて1.9で変わった仕様としては
i = 2; 10.times do |i| puts i end;
puts i # => 9
なんてもあるけど、これもCから来てる。
0434デフォルトの名無しさん2009/11/14(土) 10:13:27
整数で取り出せたとして使う機会が思い浮かばない
0435デフォルトの名無しさん2009/11/14(土) 10:17:07
>>433
なんでそれで i が変化すんの?
0436デフォルトの名無しさん2009/11/14(土) 10:17:49
Cの仕様で部分文字列は整数ってなるようなのあったっけ?
0437デフォルトの名無しさん2009/11/14(土) 10:17:53
>>433
ああ、そういうことか、
stringからcharを取り出す感覚か。
0438デフォルトの名無しさん2009/11/14(土) 10:19:44
>>434-435
あほだな
0439デフォルトの名無しさん2009/11/14(土) 10:27:01
>>435
ブロックの引数は、実は引数じゃなくて、左辺値のある式ならなんでもよかった。
で、その左辺値に代入しちゃうわけ。

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

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

いやC++ならできるけど
スコープが外とつながってるっつー話で
0442デフォルトの名無しさん2009/11/14(土) 11:03:46
Linuxでrubyを利用しています。
LinuxだけでMS-ACESSのmdb形式のデータベースを利用する方法がありますか?

0443デフォルトの名無しさん2009/11/14(土) 11:06:45
>>436
Cの文字列は文字コードの配列だから、当然1文字取り出したら文字コード=整数だよ
0444デフォルトの名無しさん2009/11/14(土) 11:09:30
charだから整数では無いな
利用するときに暗黙のキャストでintとみなされたときに始めて整数になる
0445デフォルトの名無しさん2009/11/14(土) 11:11:17
>>442
OOo経由すれば
0446デフォルトの名無しさん2009/11/14(土) 11:41:27
charは8bit整数、intは16〜32bit整数じゃないの?
0447デフォルトの名無しさん2009/11/14(土) 12:07:07
CHAR_BITが8でなければならないという話はどこにもないし、
intが64ビットではいけないという話もどこにもない。
0448デフォルトの名無しさん2009/11/14(土) 12:09:25
rubyで一文字取ったとき符号無し整数になるの?それとも符号付き?
0449デフォルトの名無しさん2009/11/14(土) 12:27:45
(古いRubyで)"\xff"[0] が -1 になるか 255 になるか、ってこと?
0450デフォルトの名無しさん2009/11/14(土) 13:31:11
"あ"[0] でもいいのかな
0451デフォルトの名無しさん2009/11/14(土) 13:50:23
string.c の該当行は、

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

だから、マイナスの値にはならない。
0452デフォルトの名無しさん2009/11/14(土) 16:12:00
Cではcharは1バイト。他は実装依存。
1バイトが何ビットかは実装依存。

ただし、stdintを使えばちゃんと指定できる。
0453デフォルトの名無しさん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 ではこういうときにどうすれば良いのでしょうか?
0454デフォルトの名無しさん2009/11/14(土) 16:41:56
とりあえずそこで止めて、
# gem install rspec cucumber
するとどうなる?
04554532009/11/14(土) 16:43:39
>>454 ありがとうございます。

やってみましたが、以下同文でした。
0456デフォルトの名無しさん2009/11/14(土) 17:06:24
たがいに依存してるなら統合しておけよwって感じだな
0457デフォルトの名無しさん2009/11/14(土) 17:50:44
ルヴィーって楽しいですか?
友達が日本人が開発者だから誇らしいと言ってましたが。
僕もルヴィーやってみたいです。
0458デフォルトの名無しさん2009/11/14(土) 18:12:30
楽しいには楽しい。
でも開発者が日本人っつーなら、なでしことかひまわりとか(ry
0459デフォルトの名無しさん2009/11/14(土) 18:15:27
>>453
-ignore-dependencies やっちまえ
責任もてないけどねw
04604532009/11/14(土) 21:25:21
>>453 です。

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

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

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

# gem install rspec

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

何だか訳の分からない状況になってきたので、一から調べなおしてみます。
お騒がせしました。
04614532009/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だったので、これで大丈夫だと思います。

以上、お騒がせしました。
0462デフォルトの名無しさん2009/11/15(日) 02:46:32
railsが提供するlink_toやyears_agoは、railsを使わないでも使えますか?
ググったらARはrails抜きで使う方法が見つかりましたが、これらは見つかりません。
0463デフォルトの名無しさん2009/11/15(日) 04:37:36
>>461
developmentな依存関係は、対象gem自体の開発を行う場合に必要と
されるものだねぇ。

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

link_toはコントローラオブジェクト(ActionController::Base)のurl_for
が必要なのでかなり面倒になると思う。
0465デフォルトの名無しさん2009/11/15(日) 06:59:56
rails無しでlink_toを使うって状況が思い浮かばないんだけど。
ルート規約とかも取り込むってこと?
0466デフォルトの名無しさん2009/11/15(日) 08:30:12
link_toてルーティング絡んでいるurl_forとか呼び出しているような。分離すんの難しくネ?
04674532009/11/15(日) 09:58:50
>>463
そうなんですか?
rspec は、develop依存ライブラリが無いと普通に実行することすら
できませんでしたが。

rspec のパッケージングがちょっとヘン、てことでしょうか。
0468デフォルトの名無しさん2009/11/15(日) 13:38:51
Ruby 1.8.7 Rails2.34 で
ビュー内に書いた
<%= time.now.strftime "%y年%m月%d日" %>
が処理されずにそのまま表示されます。なぜですか?
0469デフォルトの名無しさん2009/11/15(日) 13:59:04
処理以前にtimeじゃエラーになると思うんだが。
再現手順よろ。
0470デフォルトの名無しさん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 %>
と書くとエラーになります。
0471デフォルトの名無しさん2009/11/15(日) 14:20:54
layouts ではなく app\views/ex3を作って、そのの中にindex.html.erb作成でした。
0472デフォルトの名無しさん2009/11/15(日) 14:32:01
こっちじゃ、

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

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

なんでだろうね。
0473デフォルトの名無しさん2009/11/15(日) 15:13:11
>>470
まず、scaffoldして何も手を加えない状態でちゃんと動くか確認シル
0474デフォルトの名無しさん2009/11/16(月) 00:17:49
>>470
ERBで正しくコンパイルできているかを確認してみよう。

erb -x index.html.erb | less

これで <%= time.now.strftime .... %> のところがどうなっているか確かめてみて。
0475デフォルトの名無しさん2009/11/16(月) 19:01:25
このページ ttp://d.hatena.ne.jp/mingos/20080512/1216099482 の中段
「当たり前だけど、こんなのはNG(よく間違うけど)。」

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

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

教えてください
0476デフォルトの名無しさん2009/11/16(月) 19:49:25
コンテキストというbindingというか、その辺の問題
ブロックの中と外でp selfしてみるとわかるんじゃないかな
0477デフォルトの名無しさん2009/11/16(月) 21:51:57
binding に関してある程度詳しいページはないですか?

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

他も情報も少なく
エキスパート名皆さんはいったいどこで情報を得るのですか?
0478デフォルトの名無しさん2009/11/16(月) 21:55:15
Windowsでruby使うには、どれ使うのが良いんですか?
色々載っていて、どれがよいのかわからんです。one click rubyとかがいいんですかね
0479デフォルトの名無しさん2009/11/16(月) 23:00:05
>>477
コンテキストというプログラミング一般の用語について勉強してくれ
理解できる頃にはbindingも自然とわかるようになる
0480デフォルトの名無しさん2009/11/16(月) 23:03:12
>>478
自分で理解しながらやりたいか、手っ取り早く全部入れたいかによって違う
0481デフォルトの名無しさん2009/11/17(火) 00:10:37
>>479
プログラム自体に対するかかわりは長いから、一般的なコンテキストの
概念は理解しているつもりだけど

selfが何を指しているかは別として、関数スコープの変数にはアクセスできて
インスタンス変数が見えないのは言語の仕様なんだと思うんで、その辺を
説明した資料は無いですか?
0482デフォルトの名無しさん2009/11/17(火) 00:21:08
>>481
インスタンス変数は普通に見えてると思うんだが
何をもって「見えない」としているの?
0483デフォルトの名無しさん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
となるので、この差もよく分からない
0484デフォルトの名無しさん2009/11/17(火) 01:28:39
バージョンの数で奇数は開発版、偶数は安定版
でももう数がないから1.9.1から安定版 って話みたいだけど
1.10.0とかにはしないものなの?
0485デフォルトの名無しさん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で勘弁して
0486デフォルトの名無しさん2009/11/17(火) 01:49:40
>>483
それはかなり特殊なケースだよ

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

しかしこれ、どうやって初心者向けに説明したらいいんだろう……
分かりやすく説明できそうな人誰かお願いします
0487デフォルトの名無しさん2009/11/17(火) 01:51:45
ああ、コンテキスト変わってるのになぜ静的スコープが有効かということか
・・・なんでだろうw
0488デフォルトの名無しさん2009/11/17(火) 11:40:08
>>484
しないと太古の昔に約束されてしまった。
0489デフォルトの名無しさん2009/11/17(火) 15:00:39
バイト募集中です。内容は宿題の代行(提出課題の代行)です。
Rubyのプログラミング課題で、内容は初心者用なので比較的優しいと思われます。
拘束期間は12/15迄、課題数は4回で、問題数は一回につき一題。計4題です。
謝礼金は5000円〜 の予定です。
人助けだと思って、どうかよろしくお願いします。

連絡先:white_knight2あっとまーくlivedoor.com
0490デフォルトの名無しさん2009/11/17(火) 15:04:47
詐欺乙
04914892009/11/17(火) 15:09:49
スレ汚しすいませんでした。
0492デフォルトの名無しさん2009/11/17(火) 15:19:15
なぜ初心者スレに書いたのか
0493デフォルトの名無しさん2009/11/17(火) 15:59:41
宿題スレだと講義にない高度テクニックをこっそり混ぜられてバレるだろ
0494デフォルトの名無しさん2009/11/17(火) 16:02:16
そういういやらしい遊びがあるのか
漏れもやってみようw
0495デフォルトの名無しさん2009/11/17(火) 16:36:16
まずCで拡張ライブラリを書くんですね、分かります
0496デフォルトの名無しさん2009/11/17(火) 19:11:45
わざとまわりくどい書き方したり
バグを埋め込んだり
答える側も色々大変なんだぞ
0497デフォルトの名無しさん2009/11/17(火) 23:41:35
そうそう goruby 使ったりな
0498デフォルトの名無しさん2009/11/18(水) 00:10:28
ゴルバチョフ?
0499デフォルトの名無しさん2009/11/18(水) 03:08:21
>>489の宿題は
http://blog.livedoor.jp/white_knight2/
ここで公開されますよwwwww
0500デフォルトの名無しさん2009/11/18(水) 05:21:43
def hoge01
hoge02
end
def hoge02
end

これがエラーになって

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

Javaなんかだと同じクラス内でのみ使うprivateメソッドは最後に書くのが普通だと思うのですが。
0501デフォルトの名無しさん2009/11/18(水) 06:21:35
> これがエラーになって
なんてエラー?こっちでは普通に動いた
05025002009/11/18(水) 06:30:30
すいません、間違えました。
エラーになるのは、
hoge02
def hoge01
hoge02
end
このケースでした。
0503デフォルトの名無しさん2009/11/18(水) 07:34:32
実際のメソッド呼び出しは、その時点で定義済みじゃないと呼べるはず無いでしょ。
メソッド定義内のメソッド呼び出しは、メソッドを呼ぶという情報を与えるだけだからその時点で未定義でもいいのだろう。
0504デフォルトの名無しさん2009/11/18(水) 07:35:35
って自分でも何いってんのかよく分からん。
0505デフォルトの名無しさん2009/11/18(水) 07:42:00
Rubyスクリプトは上から順に実行(評価)される。defといえども。
0506デフォルトの名無しさん2009/11/18(水) 07:45:20
Rubyは他と違って前方参照できないめんどくさい言語
0507デフォルトの名無しさん2009/11/18(水) 08:20:03
def だけ最初に取り出されて事前構築されるという考え方もある
静的言語のコンパイルだね

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

処理行1
処理行2

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

という書き方ができない「頭でっかち」なのが一番最初はキモかったことを覚えている
0508デフォルトの名無しさん2009/11/18(水) 08:41:40
最終的に他で言うmain関数はべた書きの部分だからねえ
0509デフォルトの名無しさん2009/11/18(水) 09:07:51
実行時に未定義のメソッドや変数を参照出来るインタプリタ言語があるのか
0510デフォルトの名無しさん2009/11/18(水) 09:13:57
ぱーるはこれで hello と出る。

&doit;
sub doit { print "hello¥n"; }
0511デフォルトの名無しさん2009/11/18(水) 09:21:40
ぱーるいいな
Rubyでやりたいならdef main〜endに処理入れてコード末尾でmain呼び出せば
0512デフォルトの名無しさん2009/11/18(水) 09:26:24
>>509
本当の実行時に未定義があればどんな言語でもエラーだろう
RubyでだってNameErrorとか出る

で、まあ、ソース読み込み時に定義が読めなくても
実行時に解決可能ならOKという言語は多いと思うぞ
0513デフォルトの名無しさん2009/11/18(水) 09:31:23
あーperlは実行時にコンパイルするんだったっけか
YARVとやらが使えるようになったらrubyでもできるようになるのかな
0514デフォルトの名無しさん2009/11/18(水) 09:57:47
> YARVとやらが使えるようになったら

そうかここは初心者スレだった
0515デフォルトの名無しさん2009/11/18(水) 10:20:32
ルヴィーって面白いですか!??
開発者が日本人だから誇らしいって友達がいってました。
0516デフォルトの名無しさん2009/11/18(水) 10:33:05
>>507
最初に関数定義群があるとキモチ悪いのはあれなんでだろうね
0517デフォルトの名無しさん2009/11/18(水) 11:42:06
クラスのメンバー関数を呼ぶときにselfってつけるべきですか
0518デフォルトの名無しさん2009/11/18(水) 11:47:34
上げんなカス
0519デフォルトの名無しさん2009/11/18(水) 12:03:21
メンバー関数ってなんですかカス
0520デフォルトの名無しさん2009/11/18(水) 12:11:22
インスタンスメソッドを意味もなくselfつきで呼んでる例なんてないだろむしろ晒せカス
0521デフォルトの名無しさん2009/11/18(水) 12:12:33
RubyからRailsを取ったら何が残るの?ねぇ
0522デフォルトの名無しさん2009/11/18(水) 12:17:27
>>521
Rubyが残ります
RailsがなくてもベターPerlでグルー言語でプログラマの友でOOP初心者向け言語として普通に活躍していくでしょう

仕事として年俸1千万とか欲しいなら、そりゃJavaをやればいいのさ
0523デフォルトの名無しさん2009/11/18(水) 12:19:06
マジレスすんなカス
05245172009/11/18(水) 12:22:09
なぜフルボッコ.......
普通 self つけるでしょ???
0525デフォルトの名無しさん2009/11/18(水) 12:25:20
selfを付ける根拠を述べよ
0526デフォルトの名無しさん2009/11/18(水) 12:44:29
Rails で拡張されすぎて便利なもんだから
素の Ruby を知らないひとが出てきてるね
本気で Rails を Ruby だと思っていそう
0527デフォルトの名無しさん2009/11/18(水) 12:45:45
>>524
ここはRubyスレです
Pythonスレにお帰り下さい
0528デフォルトの名無しさん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

これがエラーになる不思議。
0529デフォルトの名無しさん2009/11/18(水) 12:51:12
>>528
レシーバつきで呼んだらエラー出してねと宣言しておきながらレシーバつきで呼ぶとは何事か
05305172009/11/18(水) 12:55:46
selfつけといた方が自分のメンバー関数を呼んでる感が強くて気に入っていたのですが
なんかつけるなと言う意見の方が多いのでつけないことにします。
俺は少数派だったのか
0531デフォルトの名無しさん2009/11/18(水) 12:58:08
>>529
それはprivateの意義よりRubyの仕様が先にありきの考え方。
privateのそもそもの意味を考えれば上のコードでエラーを出すのはおかしいでしょ。
だってselfを付けても省いても意味は変わらないんだもの。
実際上のコードのselfを消せばエラーにならないわけだが、内部ではmeth2を呼ぶために結局selfを付けてる。
0532デフォルトの名無しさん2009/11/18(水) 13:00:02
>>531
どうして他の言語の動作を持ち込むの?
0533デフォルトの名無しさん2009/11/18(水) 13:02:51
>>531
それはおまえさんの理想や狭い常識のprivateありきの考え方だな
0534デフォルトの名無しさん2009/11/18(水) 13:03:54
その辺の仕様が糞なのは皆承知してます
1.9でちょいちょい変えようとしてたんだけど、1.9の方針が変わってしまい、なかったことに
0535デフォルトの名無しさん2009/11/18(水) 13:07:04
変なのは確かだが、違うと言われても困るよな
0536デフォルトの名無しさん2009/11/18(水) 13:14:21
>>534
そうだったのか。知らなかった
0537デフォルトの名無しさん2009/11/18(水) 13:16:48
そもそもユーザーレベルでクラス再オープン可能な言語にprivateとか無意味
0538デフォルトの名無しさん2009/11/18(水) 13:16:50
こまけぇこたぁいいんだよ
0539デフォルトの名無しさん2009/11/18(水) 13:21:19
protectedはさらに摩訶不思議
0540デフォルトの名無しさん2009/11/18(水) 13:25:19
全部所謂publicという超便利かつ超危なっかしい言語でいいと思うんだ
0541デフォルトの名無しさん2009/11/18(水) 13:27:59
このへんの話題はこっちではどうしようもないくせに揉めるから嫌
0542デフォルトの名無しさん2009/11/18(水) 13:33:15
いまさらprivateとかそんな根本的な仕様変えられたら逆に困るんだが。
0543デフォルトの名無しさん2009/11/18(水) 13:34:30
みんなそんなに有効活用してないから大丈夫
0544デフォルトの名無しさん2009/11/18(水) 13:35:24
>>540
ですよね。呼んではいけない関数を呼ぶプログラマーが悪い。
0545デフォルトの名無しさん2009/11/18(水) 13:37:13
privateでよかったと思ったことなんてまず無い
たいていは舌打ちして強制的に呼ぶ
0546デフォルトの名無しさん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: の日本語のことを書かないよね。
05475462009/11/18(水) 13:39:00
すまん。誤爆した。
0548デフォルトの名無しさん2009/11/18(水) 22:26:12
>>547
かわいい
0549デフォルトの名無しさん2009/11/19(木) 14:06:09
あいうえお
かきくけこ
さしすせそ
さしすせそ
たちつてと

といった感じの文章を表示させるときに、
"さしすせそ"の文を1行消して表示させるにはどうすればいいですか?
よろしくお願いします。
0550デフォルトの名無しさん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 のブロック自力で書かんといかんな
0551デフォルトの名無しさん2009/11/19(木) 15:50:13
質問力が低すぎる
0552デフォルトの名無しさん2009/11/19(木) 16:09:01
ある程度慣れてくると質問の仕方ってのも分かるんだろうけど、
完全に初心者だとどういう情報を出したら良いのか分からないんじゃないの。
だから質問力が低いってなるんだろうけど、ここは初心者スレだよー
0553デフォルトの名無しさん2009/11/19(木) 21:13:30
メソッド呼び出しに、メソッド名の入った変数を使うことはできませんか?クラスが複数のメソッドを持っていて、どのメソッドを呼ぶか、動的に変えたいのです。やりたいことは以下のようなことです。

class Hoge
def echo_hoge
puts "hoge"
end
end

h = Hoge.new
str = "echo_hoge"
h."#{str}" # エラー
0554デフォルトの名無しさん2009/11/19(木) 21:24:41
通常はあまり推奨しない特に初心者
どーしても必要だという場合

h.__send__(str)

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

h.__send__(str, param)

でいわゆる h.str(param) になる
0555デフォルトの名無しさん2009/11/19(木) 21:26:28
俺も初心者だけど、

h.send(str)

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

使う状況ですが、例えばHumanクラスがname age sexのアクセサを持っていたとして、そのうちどれかの値を欲しいとします。
そんなときはどのアクセサが欲しいかが動的に決まると思うのですが、そんなときに human.__send__(str) で取得しようとしました。
これはおかしな考えでしょうか?
0557デフォルトの名無しさん2009/11/19(木) 21:58:41
知らねーよ
0558デフォルトの名無しさん2009/11/19(木) 21:59:49
「そのうちどれかの値を欲しい」ってどういう状況かわかんないな
どうしてもそうなったら自分ならHash使う
0559デフォルトの名無しさん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')} です"
0560デフォルトの名無しさん2009/11/19(木) 22:17:52
>>559
なるほど、受け取った文字列をメソッド名に使うんじゃなくて、そうやって分岐すればいいんですね。
勉強になりました、ありがとうございます。

でも、アクセサが増えるたびにwhenに追記するのは面倒じゃないですか?
0561デフォルトの名無しさん2009/11/19(木) 22:20:23
単なるデータならStruct使えばHash風にhuman[str]でアクセスできる

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

変なことすれば自分が困るだけみたいな手抜きスクリプトなら
そのまま__send__しちゃうこともあるけどねw
0562デフォルトの名無しさん2009/11/19(木) 22:20:50
まあ、>>559のようなものなら>558のいうように内部ではHash
で持っておけば済むところだね。

0563デフォルトの名無しさん2009/11/19(木) 23:51:20
>>561-562
ありがとうございました。
0564デフォルトの名無しさん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を変更しようとすると怒られてしまうのですが
どうしたら変更できますか?
0565デフォルトの名無しさん2009/11/20(金) 00:11:30
>>564
String#replace
05665642009/11/20(金) 00:17:46
>>565
即レスthx
String#replaceで望んだ動作です

#=の動作が変わっているのは何故なんだろう・・・(´-`)
0567デフォルトの名無しさん2009/11/20(金) 00:54:37
代入の=ってこれもどっかのクラスのメソッドなの?
0568デフォルトの名無しさん2009/11/20(金) 01:04:56
selfを変更するって発想がまずおかしい気がするが
0569デフォルトの名無しさん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は指定しています。

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

よろしくお願いします。
0570デフォルトの名無しさん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年の時点で修正されたはずだから、もし再現するなら、本家メーリングリストで聞いたほうがいいと思う。
0571デフォルトの名無しさん2009/11/20(金) 07:47:02
>>569
>Ruby : 1.8.7
詳しいバージョン番号は?最新版は1.8.7-p174だから、もし古いのを使っているなら新しいのを使ってみるといいかもね。
0572デフォルトの名無しさん2009/11/20(金) 09:42:03
>>567
代入自体はメソッドではない。
が、メソッド呼び出しになる代入(のように見える操作)はある。
0573デフォルトの名無しさん2009/11/20(金) 10:21:27
「代入の表記と似せたように hoge= と末尾に = つき表記ができるメソッドを作ることができる」
が正解
hoge.foo=123 は代入ではなくただの「末尾に=記号がついたメソッド」
hoge.bar(123) であるのと同様に
hoge.foo=(123) であるだけ

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

なにか = 値 というふうに書かれていた場合、「なにか」がその場所で変数であるかどうかで挙動が違う
変数であったら、本当に変数代入が行われる
変数ではなかったら、「なにか=」 という末尾等号メソッドへのアクセスが可能かどうかチェックされる
どれでもなかったら単にエラー
0574デフォルトの名無しさん2009/11/20(金) 22:44:51
>>573
Rubyの変数って具体的にどんな物?
0575デフォルトの名無しさん2009/11/21(土) 00:39:46
ローカル変数、グローバル変数、インスタンス変数、モジュール変数…あと何かあったっけ
とりあえず具体的にも何も、変数は変数でしか無いのだが
0576デフォルトの名無しさん2009/11/21(土) 01:08:26
=の右辺が数値の場合は、左辺に数値を渡す。
それ以外はポインターを渡す。
と思ってたのだが
0577デフォルトの名無しさん2009/11/21(土) 01:11:56
なんか訂正微妙に中途半端にめんどくさそうなレスだな
0578デフォルトの名無しさん2009/11/21(土) 02:18:33
変数に代入ってのは右辺が何かに関わらず
ある名前(変数)に右辺のオブジェクトIDを割り当てるってことでしょ

でどれでもない場合エラーなんてあるの?無ければ新しくその名前の変数が用意されるんじゃないのか
0579デフォルトの名無しさん2009/11/21(土) 02:29:19
構文エラーのことでは?
左辺にリテラルとか。
0580デフォルトの名無しさん2009/11/21(土) 03:09:51
あ、なるほどそりゃエラーだ
0581デフォルトの名無しさん2009/11/21(土) 05:22:00
リテラル(``とか%x)の動作を再定義することって可能ですか?
0582デフォルトの名無しさん2009/11/21(土) 07:00:11
>>581
出来ない。
なお``はメソッドでありリテラルではない。
0583デフォルトの名無しさん2009/11/21(土) 07:06:57
できない
それを許される言語はほとんどないと思う
似てるのはC++0x(ユーザー定義リテラル)とLisp(リードマクロ)か?
0584デフォルトの名無しさん2009/11/21(土) 09:35:04
>>578
右辺を解決して辿り着いたオブジェクトのIDに左辺を関連付ける
「動かされる」のは常に、変数名である左辺
何度も言われているが、ひとつのオブジェクトに付箋のようにぺたぺた貼り付ける変数名、というのが極めて感覚的に近い
0585デフォルトの名無しさん2009/11/21(土) 09:39:53
>>570
レスあるがとうございます。
そのページは私もググって見つけました。
直ってると思われるのにエラーするのでおかしいかなと。
とりあえず該当箇所のmkmf.rbを無理やり変更したらコンパイルは通りましたが
思ったとおりうまく動きません。(TT)

>>571
レスありがとうございます。
rubyのバージョンは1.8.7-p173です。
HPが配布しているバイナリファイルにてインストールしているのが
もしかしたらいけないのでしょうか。
0586デフォルトの名無しさん2009/11/21(土) 09:59:56
31bit符号付整数
シンボル
オブジェクトID
0587デフォルトの名無しさん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個の質問に答えてくれたら解決するまで付きやってやる
0588デフォルトの名無しさん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

この状態でオーバーライド元のメソッドをオーバーライドしたメソッドから呼ぶ事って可能ですか?
0589デフォルトの名無しさん2009/11/21(土) 18:46:59
上書きするまえにaliasで元のfooに別名を与える
0590デフォルトの名無しさん2009/11/21(土) 19:10:11
> オーバーライド元メソッドを呼び出すのにsuperというのがありますけど
いやそのりくつはおかしい
0591デフォルトの名無しさん2009/11/21(土) 19:10:48
では正しいりくつをおながいします
0592デフォルトの名無しさん2009/11/21(土) 19:12:12
class B < A
def foo(arg)
arg.concat "\n"
super.foo(*arg)  #ここで元のA#fooを呼び出したい
end
end
0593デフォルトの名無しさん2009/11/21(土) 19:22:48
overrideとoverwriteの違い
05945882009/11/21(土) 20:49:20
調べてみたらオーバーライドじゃなくて再定義ですね。すみません

>>589
の方法で出来ました。ありがとう
05955692009/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 の出力結果も書いてね。
すいません、週明けまで環境を見ることができません。 来週確認して書き込みますね。
0596チンパンジー愛ちゃん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をダウンロードしてインストすればよろし。
0597チンパンジー愛ちゃん2009/11/22(日) 00:33:32
ごめんね、間違ってた
http://rubyforge.org/projects/ruby-pg
を見るとpgの方が更新日新しいみたい

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

それと、インストール方法は
gem install /tmp/pg-0.8.0.gem
であってるよ
0598デフォルトの名無しさん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には拘りません。
0599デフォルトの名無しさん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つ定義すれば出来ますがもうちょっとスッキリする方があれが良いなと・・・
0600デフォルトの名無しさん2009/11/22(日) 01:15:36
>>598
その場所にinstall_rubysdl.rbがないんじゃね?
dirって打ってあるかどうか確認して
0601デフォルトの名無しさん2009/11/22(日) 01:22:17
>>599
関数的メソッド形式として利用したいユーザーが、意図的にモジュールを include する
それ以外はやっちゃだめだしトップレベルで include されてると期待してもだめ
06025982009/11/22(日) 01:53:40
>>600
早速のレスさんきゅうです。
install_rubysdl.rbは、やはりありません。

上で書いた通り、SDLによるMP3に拘りませんので
どなたかご教授願います。
(手元の本やGoogleでもSDLの方法しか見つかりません)
0603デフォルトの名無しさん2009/11/22(日) 02:16:35
>>602
本当に再生さえ出来ればいいのならこんな方法もある
コマンドラインから再生できるプログラムを用意(以下の例ではmplayerを使用)して
mp3_filename = 'hoge.mp3'
system("mplayer #{mp3_filename}")
ffplayでも出来ると思うけどうちでは再生が安定しなかった・・・

あとlibmplayer.dllを使っても再生できそうだけどDLLのリファレンスが見あたらないな・・・(汗
0604デフォルトの名無しさん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だとひょっとしたらダメな可能性はある・・・
0605デフォルトの名無しさん2009/11/22(日) 05:44:58
MCIは微妙だからwaveout使う方がいいよ
0606デフォルトの名無しさん2009/11/22(日) 07:46:56
>>604
WIN32OLE、完成度高いと思って使ってた。。。
どのへんの実装が微妙なのか教えていただけませんか?
0607デフォルトの名無しさん2009/11/22(日) 07:50:25
>>599
module_function
0608デフォルトの名無しさん2009/11/22(日) 08:14:24
>>606
すまん。詳細は忘れたorz
以前に1.8.xのWIN32OLEが実装不十分で正常に実行できないのがあった
その時ググっていたら1.9.xのいくつかで改善されたらしいとどこかに書いてあったのだが・・・
0609デフォルトの名無しさん2009/11/22(日) 08:25:51
>>606
1.8で使ってるが問題起こったことは無い
他人の意見を鵜呑みにするなという良い例
0610デフォルトの名無しさん2009/11/22(日) 08:34:47
>>608-609
�dです。
自分で問題にぶつかるまであまり気にしないことにします。
0611デフォルトの名無しさん2009/11/22(日) 08:49:06
思い出した
ttp://www.google.co.jp/search?hl=ja&q=InvokeVerb+win32ole
文法的な誤りではないので原因の特定までにかなり手こずった記憶がある
>>604の方法と関係があるかは確認していないけど、何らかの罠が有る可能性は
頭の隅に置いておいた方が良いかも
0612デフォルトの名無しさん2009/11/22(日) 10:33:44
Windows用の One-Click Installer の 1.9.1 はいつ頃出るのでしょうか。
06135692009/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
0614デフォルトの名無しさん2009/11/22(日) 10:47:26
>>612
出所を思い出せないから、本当かどうかは怪しいが
「もう出ないからRubyInstaller使ってね」って話がどこかにあったような
0615デフォルトの名無しさん2009/11/22(日) 10:59:09
>>598
コマンド起動してもいいなら、mplayer.exe だな。autotestで音鳴らすのに、これ使ってる。
0616デフォルトの名無しさん2009/11/22(日) 11:08:39
すんませんいきなり話題変わります。
Ruby/Tkでエントリーを表示すると
その中身は文字列になりますよね?
その文字列を数値にして、もしできなかったら(文字でできていたら)
エラーを返すにはどうすればいいですか?
計算機みたいなのをつくりたいんです。
初心者ですいません。
0617デフォルトの名無しさん2009/11/22(日) 11:18:17
ものすごおおおおおく単純には、その文字列が目的の文字だけ含む正規表現にマッチするかどうかを調べる

if /[1234567890]+/ =~ str then
puts '全部数字です'
else
puts '数字以外のものが入っています!'
end
0618デフォルトの名無しさん2009/11/22(日) 11:22:53
Integer(str)でよくね
0619デフォルトの名無しさん2009/11/22(日) 11:48:23
>>618
小数点入れたいというときに少し困る
それに、Integer() も Float() も例外をキャッチしないといけない
例外をキャッチできるような人はそもそもマニュアル読んで自力でできるはず
>>616の質問の書き方からしてまだそれは無理
だからわざわざ /[0-9]+/ ではなく /[1234567890]+/ と書いた
0620デフォルトの名無しさん2009/11/22(日) 11:48:58
>>614
どうもです。そうですか、1.91は出ないですか。そう言えば1.87も出てませんね。
自力でコンパイルなんてできないのでOne-Click Installerは本当にありがたかったのですが。
正規表現の戻り読みを使いたかったのですが。
0621チンパンジー愛ちゃん2009/11/22(日) 11:50:29
>>617
のだと、マイナスや小数点、指数表記などが扱えないので、
str.to_f
が賢いと思う 文字列で出来ているときは
0.0
が返ってくるので、この時は本当は0が入っているか
再度文字列チェックすればよい
0622デフォルトの名無しさん2009/11/22(日) 11:56:52
>>621
String#to_f で変換されるものと変換されないものの区別を自分でつけることはできる?
というか既にその処理「バグって」るだろ
最後の処理がとても非本質的
今の自分に必要なものだけ正規表現で通したほうがいい
小数が入って欲しくないかもしれないし、負の数が入って欲しくないかもしれない
0623デフォルトの名無しさん2009/11/22(日) 12:09:18
>>620
ActiveScriptRubyじゃダメ?
0624デフォルトの名無しさん2009/11/22(日) 12:29:23
>>618や>>621のような人にはこれを見せることにしてる
irb> p "1_2_3".to_f
123.0
irb> p Integer("1_2_3")
123
0625デフォルトの名無しさん2009/11/22(日) 12:36:33
>>623
すみません、「ActiveScriptRuby」と「One-Click Installer」ってどう違うのでしょうか?
ちなみに今の1.86は One-Click Installerで入れました。
0626デフォルトの名無しさん2009/11/22(日) 12:53:22
ActiveScriptRubyの1.9.1安定版って、まだ出てないんじゃなかったっけ
0627デフォルトの名無しさん2009/11/22(日) 13:19:37
>>616 です
有難うございます。
解決しました。
0628デフォルトの名無しさん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/
0629デフォルトの名無しさん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
0630デフォルトの名無しさん2009/11/22(日) 19:37:32
1.8.7を使いたければ、ActiveScriptRubyがいい。
One-Click Installerはまだ1.8.6しかなかったような気がする。
0631デフォルトの名無しさん2009/11/22(日) 22:02:48
Rubyを使うならMacかUbuntuにしておけ。
Windowsは窓から投げ捨てろ(窓だけに)
0632デフォルトの名無しさん2009/11/22(日) 22:06:38
晒し
0633デフォルトの名無しさん2009/11/22(日) 22:08:00
あげ
0634デフォルトの名無しさん2009/11/22(日) 22:24:00
「Windowsは窓から投げ捨てろ(窓だけに)」


き、決まったお (`・ω・´)シャキーン

(;´・ω・) あ、あれ・・・


(´;ω;`) ブハッ
0635デフォルトの名無しさん2009/11/22(日) 22:30:17
>>631
0636デフォルトの名無しさん2009/11/22(日) 22:38:45
サブイ
0637デフォルトの名無しさん2009/11/22(日) 23:16:20
pearlの後だからってrubyもさ(ry
0638デフォルトの名無しさん2009/11/22(日) 23:22:48
画像のサムネイルを作るのに便利なRubyのライブラリはありませんか?
レンタルサーバでも使えるように極力別のライブラリをインストールしなくてもいいようなものが良いです
0639デフォルトの名無しさん2009/11/22(日) 23:25:15
特にはないです

サムネイル作成が可能なプログラムをレンタルサーバにインストールして
sysytem メソッド等から直接呼んでください
たぶん一番早いし速いです
0640デフォルトの名無しさん2009/11/22(日) 23:30:28
画像処理系は基本的にlibjpegとかlibgifとかのラッパーだからなー。
このあたりは使う前提じゃないと見つからないんじゃないだろうか。
0641デフォルトの名無しさん2009/11/23(月) 00:04:39
レンタルサーバだと、プログラムのインストールが不可能だったりするし
難しいだろうな
PNGならRuby/PureImageで拡大縮小できるが・・・
0642デフォルトの名無しさん2009/11/23(月) 00:06:25
そういえばRMagickの開発を引き継いだ香具師はまだいないのかな。
0643デフォルトの名無しさん2009/11/23(月) 00:19:23
画像を外部ライブラリなしで操作できるスクリプト言語ってあんましないよね
実際的な速度で動作するとかまずないし
0644デフォルトの名無しさん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
0645デフォルトの名無しさん2009/11/23(月) 00:31:24
count/10.0
0646デフォルトの名無しさん2009/11/23(月) 00:31:38
うおー、空 while なんて2年ぶりくらいに見た

Math.exp(count/10) の代わりに count/10 を表示してみればわかるかも
0647デフォルトの名無しさん2009/11/23(月) 00:49:58
>>645
さんきゅう


>>646
作法上ダメなんですか?
06486382009/11/23(月) 00:50:21
やっぱり別のコマンドや画像所理ライブラリが必要なんですね
ありがとうございました
0649デフォルトの名無しさん2009/11/23(月) 01:20:55
>>647
>空 while
ダメって事はないけど

>>644みたいな例だと
(0...100).each{|count|p count}
とか
Range.new(0,100,true).each{|count|p count}
とか書くのが一般的じゃないかな

でも、自分の好きな方法で良いと思うよ
0650デフォルトの名無しさん2009/11/23(月) 01:41:51
whileやuntilやloopなどは
条件とか中の処理を間違えると無限ループしてしまう可能性がある
初心者は誤って無限ループを作ってしまうし、慣れた人でも結構気を使う

でも、(0...100).each は
中で余程おかしな処理を書かない限りまず無限ループにならない
回数が決まっているループなら、eachを積極的に使ったほうが良いと思うよ
0651デフォルトの名無しさん2009/11/23(月) 01:44:05
100回って決まってるなら、100.timesを使うなあ。
(0...100).eachってのは何の影響?
0652デフォルトの名無しさん2009/11/23(月) 01:52:09
>>651
カウンタにこだわらず「なんでもいいから100回」ならそれでいいけど
今回は厳密に「1から100まで」と数字に意味があるからね

ただ書き換えるなら1..100だと思うし、Range.newが一般的というのは同意できない
0653デフォルトの名無しさん2009/11/23(月) 04:58:15
101回じゃないのか
0654デフォルトの名無しさん2009/11/23(月) 05:15:53
ループの書き方なんて他人から押しつけられる物じゃないんだし
自分が困ったらよりよい方法を探せば良いだけでしょ

#メソッド+ブロックによるループは他言語ではあまり見ない気がするので
#Ruby初心者は理解しにくいかもね
0655デフォルトの名無しさん2009/11/23(月) 06:33:54
>>649
それ101回
わざわざバグらせてくれてありがとう
0656デフォルトの名無しさん2009/11/23(月) 06:37:12
これで誰が自演してたか明らかになったな
0657デフォルトの名無しさん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| … } のほうが間違わなくていいだろ
0658デフォルトの名無しさん2009/11/23(月) 07:22:50
>>653 >>655
100回だ。Rangeリテラルの説明を読め
0659デフォルトの名無しさん2009/11/23(月) 07:42:36
(1..100) と (1..100) は違うからな

ただの罠だが
特に2ch
0660デフォルトの名無しさん2009/11/23(月) 07:43:42
足りなかったので置いとく
.
0661デフォルトの名無しさん2009/11/23(月) 08:23:26
Rubyってそんな..と...の違いとかバグ産みやすい言語なんかw
0662デフォルトの名無しさん2009/11/23(月) 08:36:10
>>659
フォントの関係が違いがわからん・・・
0663デフォルトの名無しさん2009/11/23(月) 08:49:23
実際、.. と ... の機能を分けるのは問題が多いよな
ぱっと見で意味が分かりにくいし
0664デフォルトの名無しさん2009/11/23(月) 09:10:49
やっぱり neko operator のほうがいい?

0 ^..^ 100
0665デフォルトの名無しさん2009/11/23(月) 09:16:19
ここはきゅうり演算子を実装すべき
0 (::) 100
0666デフォルトの名無しさん2009/11/23(月) 09:22:30
.. と ... を使い分けるのって perl 由来だっけ? awk だっけ?
0667デフォルトの名無しさん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
0668デフォルトの名無しさん2009/11/23(月) 09:34:48
>>667
これいいね。rubyでも採用してほしい
0669デフォルトの名無しさん2009/11/23(月) 11:13:16
>>668
先生!配列の [3, 7] と 閉区間の [3, 7] の区別がよくわかりません!
0670デフォルトの名無しさん2009/11/23(月) 11:15:10
対応表をよく見て見ろ
0671デフォルトの名無しさん2009/11/23(月) 11:19:40
Range.newでいいじゃん

というかフツーは数字のほうをいじって2ドットで書けるように使うと思う
3ドットはあまり見ない
0672デフォルトの名無しさん2009/11/23(月) 11:19:41
ここまでこれ以上妙な記法増やすなヴォケというレス無し
0673デフォルトの名無しさん2009/11/23(月) 11:24:53
これ以上記号ふやすのヤメレ
0674デフォルトの名無しさん2009/11/23(月) 11:59:33
=!=
とか
===
とか
使ってるのはPHPだっけ?
0675デフォルトの名無しさん2009/11/23(月) 12:02:47
>>671
ほんとは記号のほうをいじるべきなんだけどね
さすがに紛らわしい
0676デフォルトの名無しさん2009/11/23(月) 12:24:28
そこでAPLですよ
0677デフォルトの名無しさん2009/11/23(月) 13:33:22
>>674
=!=じゃなくて!==な
暗黙の型変換をしないで厳密に比較する演算子
0678デフォルトの名無しさん2009/11/23(月) 13:36:54
CGIやその他から受け取った入力を同じ形式でファイルにダンプ(Marshal使用)し、
後で取り出すプログラムを書いています。
取得時にはダックタイピングで区別なく保存データを作成していますが、
別のタイミングで復元しようとすると、CGIからの入力に関してCGIモジュールの依存が残っていて(?)
"CGIモジュールがない"とエラーになってしまいます。
保存時にto_sなどを加えてみたのですが、変わりません。

純粋に文字列だけを取り出し、CGIオブジェクトの依存を切るにはどうしたらいいのでしょうか?
Ruby1.8.7です。
0679デフォルトの名無しさん2009/11/23(月) 14:16:02
>>678
・ Marshal.load する前に、復元後のオブジェクトが存在するために必要なクラスを含む全モジュールを require しておく
・ 必要なデータだけを適当なキーの Hash オブジェクトにでもまとめ、その Hash だけをまーしゃるする

後者推奨
0680デフォルトの名無しさん2009/11/23(月) 14:27:44
>>678
まず第一に、今あえて古い cgi.rb を使うのはおすすめしない
webrick/cgi や Rack に切り替えた方がいいと思う

で、純粋な文字列を取り出す方法としては、次の手がある

pure_str = String.new(cgi['key1'])

>>679
それだと結局、CGIの依存は切れないんじゃ?
06816782009/11/23(月) 15:13:19
>>679-680
ありがとうございます。
実は>>679で挙げていただいた後者の方法をとっていました。
>>680に挙げていただいたStringを新たに生成する方法で解決できました。

webrick/cgi、Rackともノーチェックでしたので、これから確認してみようと思います。
ありがとうございました!
0682デフォルトの名無しさん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
0683デフォルトの名無しさん2009/11/23(月) 19:11:13
gem install --verbose でやってみて。

0684デフォルトの名無しさん2009/11/23(月) 19:15:23
やってみます!
0685デフォルトの名無しさん2009/11/23(月) 19:17:50
こういうの見るとやってから書き込めよといつも思う
0686デフォルトの名無しさん2009/11/23(月) 19:32:04
>>685
--verboseつけたら解決するかも! とか初心者に分かるわけねーだろ
0687デフォルトの名無しさん2009/11/23(月) 19:38:33
解決というより、状況がより詳しく分かる、ってだけだがな。
0688デフォルトの名無しさん2009/11/23(月) 19:42:19
>>686
違う
0689デフォルトの名無しさん2009/11/23(月) 19:47:43
>>686
やってみますのレスはいらないってことでしょ
0690デフォルトの名無しさん2009/11/23(月) 19:50:34
まったく返事がなかったらなかったで
回答者は不安に思うかもしれないから多少の合理性はある
だいいちたった一行のレスにそんなに目くじらたてることでもないでしょ
0691デフォルトの名無しさん2009/11/23(月) 19:52:35
ねえよ
どんだけ秒速の世界に生きてんだよ
0692デフォルトの名無しさん2009/11/23(月) 20:10:02
2ちゃんをチャットと勘違いしてるアホなんだろ
0693デフォルトの名無しさん2009/11/23(月) 20:11:47
691は余裕のない世界に生きてる人なんですね
0694デフォルトの名無しさん2009/11/23(月) 20:56:49
フグ毒って怖いんだね
0695デフォルトの名無しさん2009/11/23(月) 23:51:59
当方Windowsで開発をしています
ruby script/serverを実行した際に

C:\rails\hello>ruby script/server
=> Booting Mongrel
=> Rails 2.3.4 application starting on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server

でコマンドプロンプトが停止したまま動かなくなります
Ctrl-Cをしてもサーバーは停止できません
一度だけこの状態で長時間放置したときに
500 Internal Server Error
unknown error
という表示がされました

解決方法がさっぱりわかりません
どなたか知っている方がいれば教えていただけるとありがたいです
0696デフォルトの名無しさん2009/11/23(月) 23:58:13
>>690
それって要するに書いても書かなくても同じくらい不快を与えかねないってことだから、
最適化する意味で、やっぱり書かないのがベターだな。
0697デフォルトの名無しさん2009/11/24(火) 00:09:53
>>695
Railsはスレ違い
あとコマンドプロンプトが「何も入力できない」状態になるのはそりゃ当たり前なんじゃね
0698デフォルトの名無しさん2009/11/24(火) 00:43:48
まるち
0699デフォルトの名無しさん2009/11/24(火) 06:11:49
マルチ氏ねはともかくCtrl+Breakで止まるといいね
0700デフォルトの名無しさん2009/11/24(火) 14:58:06
acceptに入っちゃうとCtrl+Cで止まらないんだよねぇ・・・
0701デフォルトの名無しさん2009/11/24(火) 15:01:13
関数を後から呼び出せるクラスをつくりたいのですが、
引数がある場合にどう書けばいいのか分かりません。
できればリファレンスなども教えてください。
よろしくおねがいします。

#######################
def f(x)
puts x
end

class Foo
def initialize(h)
@h=h
end
def bar(x)
@h(x)
end
end

foo = Foo.new(f)
foo.bar(7)
0702デフォルトの名無しさん2009/11/24(火) 15:01:26
>>695
要するに正常位
0703デフォルトの名無しさん2009/11/24(火) 15:11:07
>>701
それなんて Proc ?

def f(x)
puts x
end

foo = Proc.new {|arg| f(arg) }
# 百年後
foo.call('Hello!')
0704デフォルトの名無しさん2009/11/24(火) 15:31:52
Procのことよく分かってないのでアレですが、
もうちょっと込み入ったことがやりたかったようなので、
やっぱりクラスは定義したいのですが・・・。

数学で言うと、f(x)を元手にして
nにかんする関数の族
{lambda {|x| n*f(x)}_n
を作りたいわけです。

##############################
def f(x)
x
end

class Foo
def initialize(g)
@g = g
end
def bar(c)
lambda {|x| c*@g(x)}
end
end

foo = Foo.new(f).bar(2)
foo.call(7)

=begin
# It Works!
foo = lambda {|x| 2*f(x)}
p foo.call(7)
=end
0705デフォルトの名無しさん2009/11/24(火) 15:36:36
>>704
def f
Proc.new{|x|x}
end

class Foo
def initialize(g)
@g = g
end
def bar(c)
lambda {|x| c*@g.call(x)}
end
end

foo = Foo.new(f).bar(2)
foo.call(7)

こういう事ではなくて?
0706デフォルトの名無しさん2009/11/24(火) 15:48:47
>>703
すばやい回答ありがとうございます。

>>705
これでほとんどできてますが、
f(x)の中身がややこしいので、そこはそのままいきたい。
def f(x) p x end
のままで、Foo.new(f.to_proc).bar(2)
で渡そうとしたのですが、引数の数が違うと怒られます。
う〜む・・・。
0707デフォルトの名無しさん2009/11/24(火) 15:49:47
class Foo
def initialize(&block_arg)
@g = block_arg
end
def bar(c)
lambda {|x| c*@g.call(x)}
end
end

def f(x)
x
end

foo = Foo.new(&method(:f)).bar(2)
foo.call(7)

foo = Foo.new{|x| x }.bar(2)
foo.call(7)
0708デフォルトの名無しさん2009/11/24(火) 15:50:37
あぁ、そうか、fはProcを返さないといけないのか・・・。
簡単に書けないのかなぁ・・・。
0709デフォルトの名無しさん2009/11/24(火) 15:51:46
ミスった、ブロック呼び出しをサポートはこういう目的
foo = Foo.new{|x| f(x) }.bar(2)
0710デフォルトの名無しさん2009/11/24(火) 15:52:07
コンビネータとかカリー化とか出てきそうな予感
0711デフォルトの名無しさん2009/11/24(火) 15:59:59
>>707
視認で変更したら通らないので、コピペしたら
methodにわたすfの前にコロンがついていました。
アンドとコロンの意味は不勉強につき分かっていませんが、
これで完全に解決です。
ありがとうございました。
0712デフォルトの名無しさん2009/11/24(火) 16:03:45
>>709
おぉっ!
綺麗にかけますね。

ちなみに私はC++のヘビーユーザーですが、
Rubyの簡潔さに浮気しています。
0713デフォルトの名無しさん2009/11/24(火) 16:26:36
一応フィードバック:

methodの引数にはSymbolを渡せばいいらしい。
ttp://tinyurl.com/y8avpyg

アンド記号とかアスタリスク記号の説明は
マニュアルの「メソッド定義」のところにある。
ttp://tinyurl.com/ylzu859

みなさん、ありがとうございました。
0714デフォルトの名無しさん2009/11/24(火) 18:12:52
ルヴィーの素晴らしさを教えてください。
僕は開発者が日本人なのが誇らしくて使っていますが、
皆さんはどうでしょうか。
0715デフォルトの名無しさん2009/11/24(火) 18:13:30
Rubyの標準クラスライブラリは重武装で便利だけど
バイナリとして配布しようとするとだいぶ冗長になってしまう・・・
標準クラスライブラリがもうちょっと細分化されたビルドって無いですかね?

プラットフォームはWin32です
0716デフォルトの名無しさん2009/11/24(火) 18:24:19
LLVMを使って自作の実装を作るんだ!
0717デフォルトの名無しさん2009/11/24(火) 18:40:09
なんでLLVMが使われないんだろうな。
YARVをマルチコア対応に書き換えるよりは手間もかからんし
パフォーマンスも向上すると思うが。
0718デフォルトの名無しさん2009/11/24(火) 20:20:13
rubyでstatic変数の代わりになるような手段は何か用意されて無いですか?
やりたいことはLispみたいに
クロージャに状態を持たせるようにしたい
0719デフォルトの名無しさん2009/11/24(火) 20:47:41
>>715
exerb
0720デフォルトの名無しさん2009/11/24(火) 20:53:46
状態を入れた各オブジェクト(自作クラスのインスタンスが良いと思う)に
例えばcallって感じで、それぞれ同じ名前の特異メソッドを定義
後は呼ぶ時にはcallを呼べば良い

class MyState
 attr_accessor :state
 def initialize(init_state)
  @state = init_state
 end
end

hoge = MyState.new(0)
def hoge.call
 @state += 1
 return @state
end

fuga = MyState.new('hello')
def fuga.call
 if @state == 'hello'
 then @state = 'world'
 else @state = 'hello'
 end
 return @state
end

ary = [hoge, fuga]
10.times do
 ary.each do |state_proc|
   p state_proc.call
 end
end
0721デフォルトの名無しさん2009/11/24(火) 21:05:29
>>718
Lisp みたいにクロージャを使えばいいじゃない。
lambda とか proc とかつい最近でも言ってるじゃない。
0722デフォルトの名無しさん2009/11/24(火) 21:07:50
irb(main):007:0> def make_counter
irb(main):008:1> counter = 0
irb(main):009:1> lambda {counter += 1}
irb(main):010:1> end
=> nil
irb(main):011:0> c = make_counter
=> #<Proc:0x7ff86090@(irb):9>
irb(main):012:0> c.call
=> 1
irb(main):013:0> c.call
=> 2
irb(main):014:0> c.call
=> 3
0723デフォルトの名無しさん2009/11/24(火) 21:11:52
Rubyは昨今のマルチコアCPUプラットフォーム上での効率的なプログラミングをサポートしますか?
0724デフォルトの名無しさん2009/11/24(火) 21:41:08
>>722
ほ〜そんなことができるのか
あんま理解してないけどlambdaおもしろそうだな
0725デフォルトの名無しさん2009/11/24(火) 21:49:22
>>723
MRIやYARVは対応していません
他の実装は知らん
0726デフォルトの名無しさん2009/11/24(火) 22:27:44
>>722
やりたかったのはそれです・・!
rubyすげ・・
0727デフォルトの名無しさん2009/11/24(火) 23:49:12
ある画面上の点Aから画面上の点Bへ線を引くメソッドを作ったのですが
アンチエイリアスをかけていないので線がギザギザなんです

def draw_chart_line(start_x, start_y, end_x, end_y, color)
distance = (start_x - end_x).abs + (start_y - end_y).abs
for i in 1..distance
x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
   #set_pixelはその座標に指定した色をつけます 
set_pixel(x, y, color)
end
end

これで一応線は引けるのですがアンチエイリアスをrubyで記述するのは難しいでしょうか?
もっといいやりかたがあればそれも参考にしたいです
よろしくお願いします
0728デフォルトの名無しさん2009/11/24(火) 23:54:41
>>727
それはRubyの質問ではなくて画像処理プログラミングの質問ではないのか?
〜のようなアルゴリズムをRubyで記述したいとからなともかく

#Ruby(インタプリタ全般に言えることだが)で画像処理は遅いぞー
0729デフォルトの名無しさん2009/11/25(水) 00:02:21
>>727
他スレ行くにしてもこれ読んでからいったら?
ttp://www2.starcat.ne.jp/~fussy/algo/algo1-1.htm
0730デフォルトの名無しさん2009/11/25(水) 00:24:44
適当に中間色置けばーとか適当な返事
0731デフォルトの名無しさん2009/11/25(水) 01:45:09
Rake であるタスクを行う前に,依存関係のない別のタスクを
実行させるにはどうしたらいいでしょうか?
タスクを実行するまえに,clean したい...
0732デフォルトの名無しさん2009/11/25(水) 05:43:51
だいたいオブジェクトってなんですか?
0733デフォルトの名無しさん2009/11/25(水) 06:01:07
>>732
たくさんプログラムを書けばそのうちわかってきます
0734デフォルトの名無しさん2009/11/25(水) 07:59:31
>>731
依存関係のないタスクは呼び出されないのが当たり前。だって依存関係がないんだから。
呼び出したかったら、自分で明示的に呼び出すしかない。

>>726
>やりたかったのはそれです・・!
>rubyすげ・・
このくらい、ほかの多くの言語でも出来る。さほどRubyの強みというわけでもない。
0735デフォルトの名無しさん2009/11/25(水) 08:28:44
rake のいちばん根っこの部分の記述はとても原始的
0736デフォルトの名無しさん2009/11/25(水) 09:25:12
むしろクロージャーのないスクリプト言語を探すほうが難しいよね
07377312009/11/25(水) 11:47:46
あるタスク内から,別のタスクを明示的に呼び出す方法を
教えていただけないでしょうか?

0738デフォルトの名無しさん2009/11/25(水) 12:15:17
Rake::Task['タスク名'].invoke
0739デフォルトの名無しさん2009/11/25(水) 13:58:08

http://www.yomiuri.co.jp/national/news/20091125-OYT1T00541.htm
0740デフォルトの名無しさん2009/11/25(水) 18:32:12
>>739
>発表では、増村容疑者は昨年10月17日頃、デジタル録画画像のコピー制限を解除
>し、無制限にダビングできるソフトを、松山市内の大学生(19)に650円で、茨
>城県内の男性会社員(28)には850円でそれぞれインターネットを通して販売
>し、著作権を侵害した疑い。

もし、無制限にダビングできるソフトを無料配布していた場合は、どうなったのだろうか?
てゆーか、今後は、無料配布されるようになるでしょ。
0741デフォルトの名無しさん2009/11/25(水) 18:55:22
>>740
スレ違い
07427312009/11/25(水) 20:33:45
>>738
ありがとー.
0743デフォルトの名無しさん2009/11/25(水) 20:41:34
dl/importのexternで定義されるメソッドの動きが変な気がするのですが・・・
require 'dl/import'
module Win32
extend DL::Importable
dlload 'user32.dll'
typealias('HWND', 'void *')
typealias('LPCTSTR', 'unsigned char *')
typealias('UINT', 'unsigned int')
extern 'int MessageBox(HWND, LPCTSTR, LPCTSTR, UINT)'
end
include Win32
messageBox(nil, "text", "title", 0)
=>
(eval):2:in `messageBox': undefined method `[]' for nil:NilClass (NoMethodError)
from test.rb:11
defによる定義ならincludeすれば呼べたと思うのですが
どうすればincludeして呼べるようになりますか?
0744デフォルトの名無しさん2009/11/25(水) 22:12:26
slice が使えない件:
C++で valarray を使うと、
完全シャッフル(注:ランダムシャッフルではない)が次のように書けますが、
Ruby の slice は stride (添字の読み飛ばし)が設定できません。
第三引数として標準化してほしいと思いませんか?
・・・あるいは可読性の高い簡潔な実装をご存知でしたら教えてください。

###############################################
#include <iostream>
#include <valarray>
using namespace std;

int main()
{
int N=1<<6;
valarray<int> foo(N);
for (int i=0; i!=N; ++i) foo[i]=i;
slice evn(0,N/2,2),odd(1,N/2,2); // 第三引数に注目!
valarray<int> ef=foo[evn],of=foo[odd];
foo[slice(0,N/2,1)] = ef;
foo[slice(N/2,N/2,1)] = of;
/*
efとofはスワップに使ってるだけなので、
Rubyならこう書きたい
foo[slice(0,N/2)],foo[slice(N/2,N/2)]
= foo[slice(0,N/2,2)],foo[slice(1,N/2,2)]
*/
copy(&foo[0],&foo[0]+N,ostream_iterator<int>(cout," ")); cout << endl;
return 0;
}
0745デフォルトの名無しさん2009/11/25(水) 23:05:55
>>744
C++の関数がよくわからないんで読み間違ってるかもしれないけど
Enumerable#partitionかなあ
0746デフォルトの名無しさん2009/11/25(水) 23:29:10
>>745
お返事ありがとうございます。
partition もそうなのですが、
ブロックの引数って item になってるんですよね。
つまり上の例では partition でやっても同じなので分かりにくいですが、
a = ["R", "U", "B", "Y"]
を
a = ["R","B","U","Y"]
にしたいときには index を知りたいわけです。

現行のRubyで素直な方法は
evn = Array.new(a.size/2) {|i| 2*i}
odd = Array.new(a.size/2) {|i| 2*i+1}
をあらかじめ作っておいて
a = a.values_at(*evn) + a.values_at(*odd)
っていう感じですけど、とにかくslice が使えないのが不満なのです。
0747デフォルトの名無しさん2009/11/25(水) 23:37:06
冗談きつい
0748デフォルトの名無しさん2009/11/25(水) 23:50:23
説明が致命的にわかりにくいな
俺ならこう聞く

「配列のindex番目の要素からlength個の要素を間隔strideで抽出する slice(index, length, stride) はありますか?
たとえば %w(a b c d e f).slice(0,3,2) は ["a", "c", "e"] を返し、 %w(a b c d e f).slice(3,2,1) は ["d", "e"] を返します」
0749デフォルトの名無しさん2009/11/25(水) 23:57:39
with_index
0750デフォルトの名無しさん2009/11/26(木) 00:00:15
質問者本人ですが、
今作ってみたら基本的には(例外とか抜きで)これだけなんですけど。
newでコストかかってると思うので、参照にできないでしょうか?
初心者なので、お助け願います。

##################################
class Array
def slice(start,size,stride)
Array.new(size) {|i| self[start+i*stride]}
end
end

a = ["R", "U", "B", "Y"]
puts a
a = a.slice(0,a.size/2,2) + a.slice(1,a.size/2,2)
puts a
0751デフォルトの名無しさん2009/11/26(木) 00:13:44
+するならどっちにしろオブジェクト生成は不可避だろうさ。
というか、やりたいのはもしかしてsliceじゃなくてsortなんじゃない?
0752デフォルトの名無しさん2009/11/26(木) 00:19:34
>>749
まあそんなとこだろうな
処理全部自前だからめんどくさいが

class Array
def slice2(index, length, stride)
res = Array.new
self.each_with_index do |e, i|
res << e if ((index <= i) && (res.size < length) && ((i - index) % stride).zero?)
end
res
end
end

p ["a", "b", "c", "d", "e", "f"].slice2(0,3,2) #=> ["a", "c", "e"]
p ["a", "b", "c", "d", "e", "f"].slice2(3,2,1) #=> ["d", "e"]

ていうかそもそもこれでいいのか? なんか需要違わね?
0753デフォルトの名無しさん2009/11/26(木) 00:21:53
>>748
たしかにRubyのスレなのにC++の生コードを投下したのは申し訳なかったです。
>>749
うわっ
1.9でEnumeratorとArrayの行き来がはげしくなっている。
こんなんか。
a.each.with_index {|x,i| p x if i%2==1}
えぇっと、ブロックの中身から配列作るのってできますか?
>>751
あっそうか。コストはいいことにしよう。
偶indexを前にもってくる、というsortもできそうですけど、
順序の指定が面倒くさそうなので試してません。
0754デフォルトの名無しさん2009/11/26(木) 00:24:21
>>750
は
>>749
を反映していません。

>>753
も
>>752
を反映していません。
0755デフォルトの名無しさん2009/11/26(木) 00:26:22
p %w(a b c d e f).sort_by.with_index {|o, i| i % 2 * 100000 + i}
汎用性とか知ったことか
0756デフォルトの名無しさん2009/11/26(木) 00:29:28
>>752
ありがとうございます。

> ていうかそもそもこれでいいのか? なんか需要違わね?
そもそもの課題はというと、indexに関する条件を簡単にブロックで渡して部分配列が戻ってくればいいんです。
問題がsortっぽいから紛らわしいですけど。
0757デフォルトの名無しさん2009/11/26(木) 00:34:01
データの参照先となる配列インスタンスを1つ持ち、
[], []=, each などを与えられたブロックを使って定義するような
Arrayのサブクラスを定義して、Array#mysliceでそれを返せば
いいのかなー。
0758デフォルトの名無しさん2009/11/26(木) 00:36:06
>>755
うぉっ!
おそるおそるゼロを消してみたり・・・。

ブロックがなんで後回しにできるのか理解できていません。
マニュアル読んでみます。
0759デフォルトの名無しさん2009/11/26(木) 00:38:10
>>757
仕様っぽい、
のがスラスラ出てくるのが
プロっぽい。
0760デフォルトの名無しさん2009/11/26(木) 01:04:15
改めて考えてみると、sliceじゃなくて
>>756
>>757
が欲しいものだった気がします。
引数を増やすというのは発想がC的ですよね。
ブロック指定のほうが柔軟性があってRubyっぽいと思います。
07617442009/11/26(木) 01:38:08
あ、できた気がする。
a = a.select.with_index {|_,i| i%2==0} + a.select.with_index {|_,i| i%2==1}
07627442009/11/26(木) 01:50:56
予想通りではありますが、
# test.rb
a = Array.new(1<<12) {|x| x}
a = a.select.with_index {|_,i| i%2==0} + a.select.with_index {|_,i| i%2==1}

# test2.rb
a = Array.new(1<<12) {|x| x}
a = a.sort_by.with_index {|o, i| i % 2 * a.size + i}

----------------------
$ time ruby1.9 test.rb
real 0m0.022s
user 0m0.015s
sys 0m0.006s
$ time ruby1.9 test2.rb
real 0m0.027s
user 0m0.020s
sys 0m0.006s

######################
というわけで、若干ソートの方が遅いようです。
オーダーはどうなってるのか知りません。
07637442009/11/26(木) 02:11:05
もひとつ投入っと。
たぶんこれがベストと思います。
ここにきて745に戻ってめでたしめでたし。

$ cat test3.rb
a = Array.new(1<<12) {|x| x}
a.partition.with_index {|_,i| i%2==0}.flatten

$ time ruby1.9 test.rb
real 0m0.022s
user 0m0.015s
sys 0m0.007s

$ time ruby1.9 test2.rb
real 0m0.027s
user 0m0.020s
sys 0m0.007s

$ time ruby1.9 test3.rb
real 0m0.021s
user 0m0.015s
sys 0m0.006s
07647442009/11/26(木) 02:14:53
結論としては、
「slice 使えね〜」
っていう・・・orz

self[] との差が見いだせないんですけど・・・
07657442009/11/26(木) 02:25:45
眠いのでここまでにします。
みなさまのアドバイスをすべて消化した結果です。
本当にありがとうございました。

このイディオムは部分配列、部分行列にかんしては威力を発揮すると思います。
0766デフォルトの名無しさん2009/11/26(木) 02:48:16
sort_byを使って降順にする方法ってあるのでしょうか?

words = %w(apple banana orange mango)
sorted_words = words.sort_by{|a| ??? }
p sorted_words #=> ["orange", "mango", "banana", "apple"]
0767デフォルトの名無しさん2009/11/26(木) 03:08:56
sorted_words = words.sort_by{|a| a}.reverse

というかこの例ならこれでいい
sorted_words = words.sort{|a, b| b <=> a}
0768デフォルトの名無しさん2009/11/26(木) 03:17:30
>>767
�d
0769デフォルトの名無しさん2009/11/26(木) 11:07:43
Ruby 1.9 And Rails 3.0
http://www.slideshare.net/arrrrcamp/ruby-19-and-rails-30
0770デフォルトの名無しさん2009/11/26(木) 11:17:57
>>769はマルチ
0771デフォルトの名無しさん2009/11/26(木) 11:23:29
はわわわわー
0772デフォルトの名無しさん2009/11/26(木) 12:18:25
RSSのURLのリスト与えて更新のあったもののリストを返すRSSチェッカーのサンプルってどっかにないですか?
0773デフォルトの名無しさん2009/11/26(木) 12:31:07
サンプ…ル…?
0774デフォルトの名無しさん2009/11/26(木) 12:36:35
思いっきりアプリケーションだな(w
適当なRSSチェッカーのソース読めばいいのではなかろうか
0775デフォルトの名無しさん2009/11/26(木) 12:45:13
RSSに特化してないが五月雨とか
0776デフォルトの名無しさん2009/11/26(木) 20:07:10
>>646
激しく遅レスだが、空 while なんて文法は Ruby にはない。
0777デフォルトの名無しさん2009/11/26(木) 20:25:17
>>776
?
0778デフォルトの名無しさん2009/11/26(木) 20:32:59
Rubyでtxtファイル内の文字を数えるプログラムを作っています
その都度ファイルを指定してプログラムを動かすことはできるのですが、
あるディレクトリ内のtxtファイルを一度に処理し、それぞれのファイルごとの
結果を表示させるようにするにはどうすればいいですか?

自分で作ってみたのがこれです
#! ruby -Ks
count = Hash.new(0)
mojishu_count = Hash.new(0)
sum = 0
while line = gets
words = line.split(//)
sum += words.length
words.each{|moji|
count[moji] += 1
case moji
when /[a-z]/ || /[A-Z]/ || /\d/
mojishu_count['4.英数字'] += 1
when /[ぁ-ん]/
mojishu_count['1.ひらがな'] += 1
when /[ァ-ン]/
mojishu_count['2.カタカナ'] += 1
when /[亜-腕]/
mojishu_count['3.漢字'] += 1
else
mojishu_count['5.その他'] += 1
end}end
mojishu_count.sort{|a,b|
a[0] <=> b[0]
}.each{|key, value|
print "#{key}: #{value}\/",sum,"…(",value*100/sum,"%)\n"}
0779デフォルトの名無しさん2009/11/26(木) 20:38:39
>>777
??
0780デフォルトの名無しさん2009/11/26(木) 20:42:45
>>778
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0781デフォルトの名無しさん2009/11/26(木) 20:52:47
>>778
あまりに汚くて読んでないけど
ぱっとみエロい
0782デフォルトの名無しさん2009/11/26(木) 21:00:49
あぁん!
0783デフォルトの名無しさん2009/11/26(木) 21:14:18
うむ、該当課題に心当たりがある
宿題スレ向き
0784デフォルトの名無しさん2009/11/26(木) 21:41:59
>>781で意味わからなかったが
>>782分かってワロタ
0785デフォルトの名無しさん2009/11/26(木) 22:25:54
>>778
p Dir::entries("c:\hoge") でファイル名の配列を取得して、ファイルopenでOK?
0786デフォルトの名無しさん2009/11/27(金) 06:32:32
>>568
亀な上に便乗。自分は>>564じゃないけど
クラスを継承して作ったインスタンスが自身のメソッドで自身を書き換えるってヤバイの?
0787デフォルトの名無しさん2009/11/27(金) 08:54:07
>>786
self を別のオブジェクトに書き換えるのは変だし、そんなメソッドはそもそも Ruby にはない
通常そういう用途で望まれる動作は

   「aaa という変数名に = を使って目的の状態のオブジェクトを再代入する」

であるはず
ある変数が指し示しているオブジェクトが、再代入操作なしに別のオブジェクトに切り替わってたら大騒ぎ
0788デフォルトの名無しさん2009/11/27(金) 12:55:32
確かレシーバのクラスを変えてしまうメソッドが1つ無かったっけ?
まあ、どっちにしてもかなり例外的な事例だけど。
0789デフォルトの名無しさん2009/11/27(金) 13:14:40
Object#become のこと? (ないけど)
0790デフォルトの名無しさん2009/11/27(金) 13:15:55
File#reopenかな
0791デフォルトの名無しさん2009/11/27(金) 17:01:02

rails2.3.5
07927862009/11/27(金) 18:41:22
>>787-790
レスありがとう
でも、標準クラスに自身を変更している(ように見える)メソッドがありますよね?
後ろに!が付くメソッドとかArray#clearとかってどういうどうなっているのかなと思いました
0793デフォルトの名無しさん2009/11/27(金) 18:49:45
>>792
あれはselfに別の何かを代入しているわけじゃないから。
0794デフォルトの名無しさん2009/11/27(金) 19:02:37
ブロックの instance_eval じゃない?
0795デフォルトの名無しさん2009/11/27(金) 19:10:23
>>778 適当でごめん
#! ruby -Ks
def count_by_char_and_kind(io)
 count_by_char = Hash.new(0)
 count_by_kind = Hash.new(0)
 sum = 0
 io.each_line do |line|
  chars = line.split(//)
  sum += chars.length
  chars.each do |char|
   count_by_char[char] += 1
   case char
   when /[a-z]/ || /[A-Z]/ || /¥d/ ; kind = '4.英数字'
   when /[ぁ-ん]/          ; kind = '1.ひらがな'
   when /[ァ-ン]/          ; kind = '2.カタカナ'
   when /[亜-腕]/          ; kind = '3.漢字'
   else               ; kind = '5.その他'
   end
   count_by_kind[kind] += 1
  end
 end
 return count_by_char, count_by_kind
end

後半へつづく
0796デフォルトの名無しさん2009/11/27(金) 19:12:30
つづき

def print_by_kind(count_by_kind)
 count_by_kind.sort_by {|k,v| k[0] }.each {|key, value|
  puts "#{key}: #{value}¥/",sum,"…(",value*100/sum,"%)"
 }
end

if __FILE__ == $0
 if ARGV.empty?
  count_by_char, count_by_kind = count_by_char_and_kind($stdin)
  print_by_kidn(count_by_kind)
 else
  dir = ARGV[0]
  Dir.glob("#{dir}/*.txt").each do |filename|
   File.open(filename) do |f|
    count_by_char, count_by_kind = count_by_char_and_kind(f)
    print_by_kidn(count_by_kind)
   end
  end
 end
end
0797デフォルトの名無しさん2009/11/27(金) 19:12:49
>>795
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0798デフォルトの名無しさん2009/11/27(金) 19:15:32
>>792
a = [:a]
b = a
p a, b, a.object_id, b.object_id
a.clear
p a, b, a.object_id, b.object_id
a << :a
p a, b, a.object_id, b.object_id
a = []
p a, b, a.object_id, b.object_id

変数の(再)代入とオブジェクトの状態の変化には大きな違いがあることに
この例で気づいてもらえるかもしれない

ちなみに単純化した配列もどき(一個しか値を持てない)でclearとかを書いてみるとこんな感じ
破壊的メソッドがやってることなんて特別でも何でもなくこの程度
class ArrayModoki
 def [](k)
  @data
 end
 def <<(x)
  @data = x
 end
 def clear
  @data = nil
 end
end
0799デフォルトの名無しさん2009/11/27(金) 19:21:16
あーついでにいっておくと、こういうのはもうクラスを作った方がすっきりするからね。

class CountChars
 def initialize
  @count_by_char = Hash.new(0)
  @count_by_kind = Hash.new(0)
 end
 def count(io)
  # カウントして @count_by_char と @count_by_kind を設定
  return self
 end
 def print
  # @count_by_kind の値を出力
  return self
 end
end

if __FILE__ == $0
 dir = ARGV[0]
 Dir.glob("#{dir}/*.txt").each do |filename|
  File.open(filename) do |f|
   CountChars.new.count(f).print
  end
 end
end
0800デフォルトの名無しさん2009/11/27(金) 19:52:47
>>799
http://pc12.2ch.net/test/read.cgi/tech/1200175247/
0801デフォルトの名無しさん2009/11/27(金) 20:51:51
はやくパッチレベル上がらないかなあ
0802デフォルトの名無しさん2009/11/27(金) 22:43:48
これはリリースされる予定のものなんだろうかね。
ttp://twitter.com/shyouhei/status/6044003590
0803デフォルトの名無しさん2009/11/27(金) 22:49:23
>>802
> You cannot use the Twitter website without having JavaScript enabled on your web browser.
> Please re-enable JavaScript and refresh this page.
0804デフォルトの名無しさん2009/11/27(金) 23:05:41
>>803
w3mでも見られるよ。
0805デフォルトの名無しさん2009/11/28(土) 10:42:50
今まで気にしていなかったけど、C言語のインクリメント/デクリメントって使えないのな。

i = 0
i++

じゃなくて↓を使う:
i += 1
0806デフォルトの名無しさん2009/11/28(土) 10:54:55
うん、どうやって実装していいかわからんという理由でスルーされてる
見かけ同じで動作がちょっと似てるが細かい挙動はぜんぜん違う、みたいなのだったらないほうがましだし
0807デフォルトの名無しさん2009/11/28(土) 10:59:54
>>806
ML見てきたけど、実装が困難というのは技術的な問題じゃなくて、
変数がオブジェクトではないRubyで、どのようにして一貫性を持たせるか
という問題で実装されていない、と。
0808デフォルトの名無しさん2009/11/28(土) 11:01:28
attr_* や private の轍を踏むわけにはいかんからなw
名前同じである側面では他言語のと同じ動作だが実際の挙動は全然違って、
他言語のと同じつもりで使った人から非難轟々
0809デフォルトの名無しさん2009/11/28(土) 11:15:09
大半の要望は ++i と i++ の区別もついてないような人からだしな。
0810デフォルトの名無しさん2009/11/28(土) 11:15:22
ああ、あれはないわ
0811デフォルトの名無しさん2009/11/28(土) 11:18:30
C言語でライブラリを作ってRubyから使いたいのですが、どうすればできますか
ググレカスでもいいのでキーワードだけでも教えてください。
0812デフォルトの名無しさん2009/11/28(土) 11:25:08
ruby 拡張ライブラリ
0813デフォルトの名無しさん2009/11/28(土) 11:38:44
++i と i++ は結果的には一緒だろ
*++i と *i++ なら違うけど
0814デフォルトの名無しさん2009/11/28(土) 11:41:48
どうしてポインタになった
0815デフォルトの名無しさん2009/11/28(土) 11:52:43
>>813
結果的に?その結果…もとい、戻り値が違うだろ
0816デフォルトの名無しさん2009/11/28(土) 12:40:02
そうそう、>>813 みたいな連中。

0817デフォルトの名無しさん2009/11/28(土) 12:51:03
前置と後置の2種類ある時点で、なにか動作違うのかもとか立ち止まって欲しいよね
0818デフォルトの名無しさん2009/11/28(土) 12:58:52
初心者だと難しいと思うよ。
そもそも「単項演算子」という概念が無い時点で
i++ と ++i は同じものと考えてしまう人が多いように思う。

「えっ、1+3 も 3+1 も同じだよね?」
0819デフォルトの名無しさん2009/11/28(土) 13:08:10
あと、入門書とかでも前置/後置の違いの説明はするものの
使用例というか、実際的な問題でどのように使われるかという例示がないものが多いのが原因かな。

初心者だと
「え、何で二つあるの。どういう時に使うの。わかんねーから適当でいいや。」
でスルーしちゃう人が多いのよ。
0820デフォルトの名無しさん2009/11/28(土) 13:23:58
いやそのなんつーか、
「××言語の○○の機能が欲しいです」という意見があった場合、
その人が××言語の、最低限○○機能自体はよく理解してるというのは絶対的条件だと思うが

なんで「その人」に××言語の○○の機能の説明をこっちがしないといかんのよ
0821デフォルトの名無しさん2009/11/28(土) 14:07:51
前から思ってたんだが、
全治と河内があるのなら+i+があってもいいよね。
0822デフォルトの名無しさん2009/11/28(土) 17:04:39
配列を操作していると1,2時間停止するのはあり?
0823デフォルトの名無しさん2009/11/28(土) 17:09:40
処理の内容と環境次第
0824デフォルトの名無しさん2009/11/28(土) 17:22:43
うむ

次の質問の方どうぞ
0825デフォルトの名無しさん2009/11/28(土) 18:01:11
>>821

+ j +

0826デフォルトの名無しさん2009/11/28(土) 18:02:16
水橋演算子と命名
0827デフォルトの名無しさん2009/11/28(土) 18:24:39
google web apisをrubyで使用するプログラムがちょっと古い本に載ってて
web apisを書かれてあるURLへDLしに行ったんですがそのページはありませんでした。

今はもうweb apisは無くなってるんですか?
0828デフォルトの名無しさん2009/11/28(土) 18:38:55
>>827
Ajax APIで置き換えられたっぽい
0829デフォルトの名無しさん2009/11/28(土) 19:45:43
+    +
     j
0830デフォルトの名無しさん2009/11/29(日) 00:27:09
>>828
わが国のITはユーザに使用法を十分説明する時間がありません。
このため、初心者がベテランに疑問についてたずねる光景を目にすることがあります。
しかし本来は事故(情報漏えいなど)が発生した場合の責任は、
接続業者、サーバ運営者、システムを開発したエンジニアにあります。
メーカあるいは購入店にたずねるべきです。
利用者の仕事は自治(掲示板の秩序を守ること)です。助言を行ってはなりません。
素人が専門技術に言及するのは「親切」ではありません。「無責任」です。
海外のプロフェッショナルは、「私の仕事ではない」と答えるはずです。
0831デフォルトの名無しさん2009/11/29(日) 00:32:33
機械翻訳みたいな文章だなー
0832デフォルトの名無しさん2009/11/29(日) 15:12:23
ary[0,1,2]
ary[:last] = 4
こういうのないですか?(。・ω・)
0833デフォルトの名無しさん2009/11/29(日) 15:13:54
ary[-1] = 4
0834デフォルトの名無しさん2009/11/29(日) 15:14:45
>>832
ary[-1] = 4

じゃダメなの?

0835デフォルトの名無しさん2009/11/29(日) 15:31:54
>>832
ary[0,1,2]の意図が不明なので説明しる
0836デフォルトの名無しさん2009/11/29(日) 15:40:11
A: aryの0番目の要素(Array)の1番目の要素(Array)の2番目の要素
=> ary[0][1][2]

B: aryの0番目、1番目、2番目の3要素からなるArray
=> ary[0..2] (引数はRange)

C: aryの、0番から数えて3つの要素からなるArray
=> ary[0, 3] (引数は整数2つ)

D: その他
0837デフォルトの名無しさん2009/11/29(日) 15:51:56
D': ary = [0, 1, 2]

そういえば [0, 2, 4, 8, 6] や [3, 6, 9, 12, 15] みたいな配列を作りたい場合どうするんだっけ
0838デフォルトの名無しさん2009/11/29(日) 16:02:15
Array.new(5) {|i| (i + 1) * 3 }

どうするっても色々あるが、とりあえず後者はこんなとこで
前者はなかなかの難問だな
0839デフォルトの名無しさん2009/11/29(日) 16:02:29
>>837
どうにもなんね
irb> p Range.new(0, 4).to_a.map{|e| e*2}
[0, 2, 4, 6, 8]
irb> p Range.new(0, 9).to_a.find_all{|e| e%2 == 0}
[0, 2, 4, 6, 8]

こんな感じ
0840デフォルトの名無しさん2009/11/29(日) 16:12:01
>>838,839
サンクス
もしかしたら Array.new(start, stop, step) みたいに一発で書けるのがあるのかなーと思って
0841デフォルトの名無しさん2009/11/29(日) 16:16:22
>>832
これのことかなー

ary.push 4
0842デフォルトの名無しさん2009/11/29(日) 16:18:46
>>840
(0..8).step(2).to_a

1.8.6だとRange#stepにブロック必須だからきれいに書けなさそう
0843デフォルトの名無しさん2009/11/29(日) 16:20:51
>>840
irb> 0.step(8, 2).to_a
[0, 2, 4, 6, 8]

これも 1.8.6 では動作しないはず
0844デフォルトの名無しさん2009/11/29(日) 16:34:43
>>835
=ぬけてました。。
>>833-834
こんなことできたんですね!
ありがとうございます
0845デフォルトの名無しさん2009/11/29(日) 16:37:02
ary.values_at(0, 1, 2) というのもあったな。
08468402009/11/29(日) 16:54:32
>>842,843
たびたびサンクス
でも正直なところ漏れのダメ脳にはフィットしませんですた
0847デフォルトの名無しさん2009/11/29(日) 20:26:11
dir = Dir.foreach(".") do |file|
(中略)
end

こういう式を、書籍で見たのですが、
Dir.foreach(".") do |file|
(中略)
end
なのは見慣れているのですが
dir =
ってどういう意味なんでしょうか。
単にdir変数に現フォルダのフォルダ名を
入れて、逐一file変数に放り込んでるだけですか?
意味が無いような。。
0848デフォルトの名無しさん2009/11/29(日) 20:29:53
Dir.foreach は nil を返すので、それ以降 dir を参照しているとしても
あまり意味ないね。
0849デフォルトの名無しさん2009/11/29(日) 20:35:26
うん、実行して確かめずに本を書いてる人は一定数いる
0850デフォルトの名無しさん2009/11/29(日) 20:43:49
Rubyは糞本が多い
0851デフォルトの名無しさん2009/11/29(日) 20:57:01
亀田戦のため…
と思ったのに
即答、ありがとうございます。
感謝
0852デフォルトの名無しさん2009/11/30(月) 03:58:59
Ruby1.8.6です。
小数の16進表示はRubyでは不可なのでしょうか?

valA=3.14
valB=valA.to_s(16)
とすると、ArgumentErrorになりました。
0853デフォルトの名無しさん2009/11/30(月) 06:05:11
どう表示されたら正解なんだい?
0854デフォルトの名無しさん2009/11/30(月) 10:52:47
>>852
Rubyでは、というからには他の言語ではできるの?>小数の16進表記
できるんなら 3.14
浮動小数点数のビット列の16進表現=小数の16進表記 という
08558542009/11/30(月) 10:55:07
ミスったw

Rubyでは、というからには他の言語ではできるの?>小数の16進表記
できるんなら 3.14 はどう表記される?

浮動小数点数のビット列を16進で表示したもの=小数の16進表記 ということではないよね?
0856デフォルトの名無しさん2009/11/30(月) 11:15:03
変換ができる言語はちょっと検索しただけでは見つからなかったけど、
浮動小数点の定数の16進表記はC99ではできるね。

3.23d... になると思うけど。
0857デフォルトの名無しさん2009/11/30(月) 12:10:14
たとえば10進の 0.5 は (0.5).to_s(16)すると 0.8 になればいいのかな?
0858デフォルトの名無しさん2009/11/30(月) 12:19:15
こんな感じ?もっとうまく書けそうだけど。

x = 3.14
a = x.to_i.to_s(16)+'.'
b = x.abs-x.abs.to_i
c = 1.0/16
while c > Float::EPSILON
p = (b/c).to_i
a << p.to_s(16)
b = b-c*p
c = c/16
end
puts a
0859デフォルトの名無しさん2009/11/30(月) 12:31:16
bcd ならめちゃ簡単なんだけどな
多分そういうことじゃないんだろうな
0860デフォルトの名無しさん2009/11/30(月) 12:51:50
基数が違うと、1未満の分解能が違ってくるからなー。

たとえば

0.75(10)
=> 0.5(10) + 0.25(10)
=> 0.8(16) + 0.4(16)
=> 0.C(16)

のようなのは正確に変換できるけど。
0861デフォルトの名無しさん2009/11/30(月) 12:59:09
もともと内部ビット列2進を10進表現したものだからあまり気にしても
しょーがない。
08628522009/11/30(月) 16:57:52
>>853-861
レスどうも。
私がやりたいのは、ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113551061
のように小数を16進表示することです。

アルゴリズムでは>>858さんのようになると思いますが、てっきり
valA.to_s(16) のように1行で済むと思っていました。
0863デフォルトの名無しさん2009/11/30(月) 17:55:38
そういえば、Rubyの開発会議で誰かが16進浮動小数点数リテラルの導入について話してたことがあったなあ。
0864デフォルトの名無しさん2009/11/30(月) 17:57:06
>>858
掛け算を増やしたほうが効率いいかな?

x = 3.14
a = x.to_i.to_s(16)+'.'
b = x.abs-x.abs.to_i
c = 16.0

while b > Float::EPSILON
break if b == 0
p = (b*c).to_i
a << p.to_s(16)
b = b-p/c
c *= 16
end

puts a
0865デフォルトの名無しさん2009/11/30(月) 18:06:42
リスパダールという薬を飲むと、頭が冴えてきて
プログラムがうまくできるようになる
0866デフォルトの名無しさん2009/11/30(月) 21:47:00
>>858
>>864
Float演算だと誤差が蓄積するので、分数演算にしてみた

require "Rational"

class Float
 def to_base( base, precision = 10 )
  base_float = self.to_i.to_s(16) + '.'

  fractional = self.abs - self.abs.to_i
  shift_to_int = 10**(fractional.to_s.length - 2)
  remainder = Rational( (fractional*shift_to_int).to_i, shift_to_int )

  base_power = base

  precision.times do
   break if remainder == 0

   carried_remainder = remainder * base_power
   carry = carried_remainder.to_i
   base_float << carry.to_s(base)

   remainder -= Rational(carry, base_power)
   base_power *= base
  end

  base_float
 end
end

puts 3.14.to_base(16, 12)
0867デフォルトの名無しさん2009/11/30(月) 22:19:18
やめないで
0868デフォルトの名無しさん2009/11/30(月) 23:48:58
1/0とか∞とかはどう表現するの?
0869デフォルトの名無しさん2009/11/30(月) 23:56:04
>>866ですが、循環小数になることがあるので、循環小数部分はカッコを付けて
3.2(3d70a)... という表現にした。

http://codepad.org/se0KjmXu
0870デフォルトの名無しさん2009/11/30(月) 23:56:35
>>868
1.0/0

irb> p 1.0 / 0
Infinity
irb> p -1.0 / 0
-Infinity
irb> p 0.0 / 0
NaN

定数的に利用することはできない(Float::INFINITY とかがあるわけではない)
実際に適当な計算をして返り値を利用する
0871デフォルトの名無しさん2009/12/01(火) 00:25:26
16進数の小数点って初めて聞いた・・・
何に使われるんだろう?
0872デフォルトの名無しさん2009/12/01(火) 00:28:03
基本情報の試験にも普通に出るぞ
0873デフォルトの名無しさん2009/12/01(火) 00:29:54
…まあ、おおむね概念的なもんで、ふつーにプログラミングしてるぶんにはまずお目にかからない
これが必要になる分野なんて限られてるはず

が、自力で導き出せるのが好ましい
0874デフォルトの名無しさん2009/12/01(火) 00:30:58
こういうことになるのか?

10進数 1.0、0.9、0.8、0.7、0.6、0.5、0.4、0.3、0.2、0.1……
16進数 1.0、0.F、0.E、0.D、0.C、0.B、0.A、0.9、0.8、0.7……
0875デフォルトの名無しさん2009/12/01(火) 00:37:51
>>874
そうだよ
10進数との対応をとろうとさえしなければそれほど難しいものではない

そういや情報処理で問題があったなと思ってぐぐった

16進小数 2A.4C と等しいものはどれか。
 ア 2^5 + 2^3 + 2^1 + 2^(-2) + 2^(-5) + 2^(-6)
 イ 2^5 + 2^3 + 2^1 + 2^(-1) + 2^(-4) + 2^(-5)
 ウ 2^6 + 2^4 + 2^2 + 2^(-2) + 2^(-5) + 2^(-6)
 エ 2^6 + 2^4 + 2^2 + 2^(-1) + 2^(-4) + 2^(-5)

0876デフォルトの名無しさん2009/12/01(火) 00:51:04
なるほど。0.1は16進数では16^(-1)、2進数では2^(-1)になるわけか。
0.01はそれぞれ、16^(-2)、2^(-2)と……
小数点以下なんて考えたこともなかったぜ
0877デフォルトの名無しさん2009/12/01(火) 01:13:38
>>876
というか、ふつうの10進数の小数部自体、0.abc… = 10^(-1)*a + 10^(-2)*b + 10^(-3)*c + … だからな
2進数なら底(「xのn乗」のxの値、テイ、基数)が10ではなく2になって、16進数なら底が16になる
そんだけ
たったそんだけ

>>875は
(16^1)*2 + (16^0)*A + (16^-1)*4 + (16^-2)*C =
((2^4)^1)*2 + ((2^4)^0)*(2*2*2+2) + ((2^4)^(-1))*(2*2) + ((2^4)^(-2))*(2*2*2+2*2)
(2^4)*2 + 1*(2^3+2^1) + (2^(-4))*(2^2) + (2^(-8))*(2^3 + 2^2)
2^5 + 2^3 + 2^1 + 2^(-2) + 2^(-5) + 2^(-6)

よって ア
0878デフォルトの名無しさん2009/12/01(火) 01:17:18
なるほど分からん
0879デフォルトの名無しさん2009/12/01(火) 01:43:22
>>864
w=3.14
kisu=16
keta=12
sprintf("%d.%s",w,(w % 1 * kisu ** keta).to_i.to_s(kisu))
0880デフォルトの名無しさん2009/12/01(火) 08:28:12
>>879
X sprintf("%d.%s",w,(w % 1 * kisu ** keta).to_i.to_s(kisu))
○ sprintf("%s.%s",w.to_i.to_s(kisu),(w % 1 * kisu ** keta).to_i.to_s(kisu))
0881デフォルトの名無しさん2009/12/01(火) 10:54:42
質問です。
s = "hoge"
p s.is_a?(String)
の結果がtrueになることが、納得できないのですが。
StringクラスのオブジェクトはStringクラスとis-aの関係なんでしょうか?
0882デフォルトの名無しさん2009/12/01(火) 10:57:31
a string is a string だぞ。当然じゃないか
0883デフォルトの名無しさん2009/12/01(火) 11:05:24
>>881
"hoge".kind_of?(String) が true だったら納得してもらえる?
0884デフォルトの名無しさん2009/12/01(火) 11:15:15
たぶん
class MyString < String ; end
MyString.is_a?(String)
がtrueになるべきとかが言いたいんだと思う
0885デフォルトの名無しさん2009/12/01(火) 11:22:33
instance_of? もあるからな…
0886デフォルトの名無しさん2009/12/01(火) 12:29:01
まあ、なんだ、一応字面としては

uri = if param.kind_of?(URI) then param else URI.parse(param) end

は動作せずに

uri = if param.class.kind_of?(URI) then param else URI.parse(param) end

か

uri = if param.instance_of?(URI) then param else URI.parse(param) end

とのみ、書けるべきではある
is_a? ではなく kind_of? が主流になりつつある理由もこのへんが結構あるんではないかとか邪推
0887デフォルトの名無しさん2009/12/01(火) 12:33:52
Rubyのis_a?はそういうものだと覚えるしかないんじゃないか
0888デフォルトの名無しさん2009/12/01(火) 12:57:55
a dog is an animal
何かおかしなところある?
0889デフォルトの名無しさん2009/12/01(火) 13:02:10
Wikipediaに乗ってるようなis-a関係は
オブジェクト指向でクラスとクラスの継承関係を表すもの
Rubyではそうじゃないから違和感があるのはわかる
0890デフォルトの名無しさん2009/12/01(火) 13:03:21
クラスもオブジェクトであるというのが変なとこで弊害に
0891デフォルトの名無しさん2009/12/01(火) 15:31:35
>>871
πの計算
0892デフォルトの名無しさん2009/12/01(火) 15:37:28
>>889
Rubyでもそうじゃないの?
3.14.is_a?(Float), (Numeric), (Object) ぜんぶtrueになるけど。
0893デフォルトの名無しさん2009/12/01(火) 16:25:02
一般的なオブジェクト指向解説書での「is a関係」がクラス間の関係を表すからおかしいんだよな。
Nobita is a Strudent. はいいけど Student is a Person. はおかしいもん。
「is a関係」がインスタンス-クラス間の関係を表すように定義してほしかった。
0894デフォルトの名無しさん2009/12/01(火) 17:07:26
is-aの関係であるなら、それはRubyでは継承で表されるべき
ただし、継承がis-aでなければならないという意味ではない
0895デフォルトの名無しさん2009/12/01(火) 17:27:01
>>893
一般的なオブジェクト指向の概説上は、インスタンスの存在はわりとどーでもいいんで…
0896デフォルトの名無しさん2009/12/01(火) 17:28:03
結局は>>887でFAなのがなんとも…
0897デフォルトの名無しさん2009/12/02(水) 02:17:00
1.8.xの変数と定数についてですが、たとえば
foo = Array.new
FOO = Array.new
でインスタンスfoo及びFOOの挙動に違いはないという認識であっていますか?
どちらもArrayの中身を自由に書き換えられるようですが・・・
0898デフォルトの名無しさん2009/12/02(水) 02:41:54
>897
中身は自由に書き換えることができる。
参照先を変えることができないのが定数。
例えば、その後にもう一度FOO = Array.newとかしようとすると怒られる。
0899デフォルトの名無しさん2009/12/02(水) 07:09:07
>>897
再代入によってオブジェクトIDを切り替えると警告される
それだけ
0900デフォルトの名無しさん2009/12/02(水) 10:55:23
irb> a = Array.new
irb> CONST = a
irb> CONST = a
(irb):3: warning: already initialized constant CONST

うそつきいいいい
0901デフォルトの名無しさん2009/12/02(水) 11:33:57
>>900
誰に対して言っているんだ、それは?

ちゃんと警告は出てるぞ。だから問題無いじゃないか。
0902デフォルトの名無しさん2009/12/02(水) 11:39:52
定数への再代入という行為自体がダメなんだろ
代入されようとしているオブジェクトのID云々は関係ない
0903デフォルトの名無しさん2009/12/02(水) 12:55:09
ようはRubyの定数はtype * const(type const *でない)
0904デフォルトの名無しさん2009/12/02(水) 12:57:17
>>900 は何を主張しているの?
0905デフォルトの名無しさん2009/12/02(水) 12:59:48
>>901 = >>904
0906デフォルトの名無しさん2009/12/02(水) 13:04:22
初心者スレだから放っておいてもいいんだが

2chのレスは基本、直前へのリアクションだ
それを踏まえると>>900は
「同一オブジェクトを再代入したけど警告出るじゃん
オブジェクトIDを切り替えるのが警告の条件のひとつだなんて>>899うそつきいいいい」
となる
0907デフォルトの名無しさん2009/12/02(水) 13:19:12
irb> CONST = Array.new
irb> CONST = Array.new
でなかった理由に思い至るかどうかとかそんな話
0908デフォルトの名無しさん2009/12/02(水) 19:54:24
ルビー厨キモ過ぎ
0909デフォルトの名無しさん2009/12/02(水) 19:58:21
そろそろNGワードだな。
0910デフォルトの名無しさん2009/12/02(水) 20:24:59
勝手にNGにしろよクズ
0911デフォルトの名無しさん2009/12/02(水) 22:02:30
activerecordで新しいデータをsaveしたあとそのデータのidって検索しないでわかる?
0912デフォルトの名無しさん2009/12/02(水) 23:12:29
>>911

(インスタンスメソッドの)
def create
 if self.id.nil? && connection.prefetch_primary_key?(self.class.table_name)
 self.id = connection.next_sequence_value(self.class.sequence_name)
 end
:
だから作った時点でidは貰えていると思う。
0913デフォルトの名無しさん2009/12/03(木) 00:00:58
idとれてました
ありがとうございました
0914デフォルトの名無しさん2009/12/03(木) 00:09:32
一度requireして使用したライブラリを削除することはできますか?

トップレベルじゃなく、特定の名前空間や関数の中でrequireしたような場合でも
スコープが限定されないようなので、
あるいは限定的なスコープに読み込むような手法でもよいのですが・・・

module Foo
 require 'bar'
end
b = Bar.new #=>ここで使用できないように限定したい
0915デフォルトの名無しさん2009/12/03(木) 00:15:51
>>914
できません

というかその使い方は変だ
09169142009/12/03(木) 00:18:53
>>915
ありがとうございます
0917デフォルトの名無しさん2009/12/03(木) 00:45:37
>>914
ライブラリというかrequire等で定義されたクラスを削除する事は
remove_constで出来るけど、求めてるものとは違うんだろうな
0918デフォルトの名無しさん2009/12/03(木) 01:10:44
どういうケースなのか知らないからこれが解決になっているかは知らないが、
そういうのは別のファイルでmoduleで定義して、
使用するクラスでincludeするというモデルが素直なモデルだけどね
09199142009/12/03(木) 01:13:52
>>917
ありがとうございます。確認できました。そういう意味でした。
こちらの説明がよくなかったですm(_ _)m
0920デフォルトの名無しさん2009/12/03(木) 03:28:10
rsenseというのを知ったんですけど、これってどうやれば動きますか?
0921デフォルトの名無しさん2009/12/03(木) 08:03:55
remove_constなんて「使っちゃ駄目」だろう
0922デフォルトの名無しさん2009/12/03(木) 08:37:32
使っちゃだめとまでは言わないけど、使っていいレベルの人なら自力で見つけられるはず。
0923デフォルトの名無しさん2009/12/03(木) 08:48:14
いや remove_const を使っちゃ駄目だろ
module で囲まれてる外と中で同じ表記の Bar.new をしたいが、Bar が指すクラスは別にしたいってことだろ、これ
0924デフォルトの名無しさん2009/12/03(木) 08:57:13
remove_constの正しい使い方はライブラリの再読込
バグがあってもプログラムを停止させずにクラスを作り直せる
0925デフォルトの名無しさん2009/12/03(木) 09:01:26
あー、>>921>>932は、*この文脈*では使っちゃだめと言ってるのか。
09269252009/12/03(木) 09:02:39
レス番手打ちしちゃいかんなー。>>921>>923の間違いですもちろん。
0927デフォルトの名無しさん2009/12/03(木) 11:08:50
JavaScriptだと無名関数をarguments.calleeで呼べますが、Rubyにはそういう機能はあります
でしょうか?

(function(n) { return n <=1 ? n : n*arguments.callee(n-1) })(3) //=> 6

Rubyで、これ↓を

fact = proc {|n| n<=1 ? n : n*fact.call(n-1) }
print fact.call(3) #=> 6

1行で書くと???

proc {|n| n<=1 ? n : n*???.call(n-1) }.call(3)
0928デフォルトの名無しさん2009/12/03(木) 15:30:16
"abcbc".nantoka(/bc/) # => [1, 3]
のような正規表現にマッチしたインデックスの配列を返すメソッドって?
indexを複数やる感じ
0929デフォルトの名無しさん2009/12/03(木) 15:43:20
"abcbc".scan(/bc/){p [$~.begin(0), $~.end(0), $~.offset(0)]}
[1, 3, [1, 3]]
[3, 5, [3, 5]]
09309292009/12/03(木) 15:50:57
ごめんなさい。求めているのと違うこと書いた。

require "enumerator"
"abcbc".enum_for(:scan, /bc/).map{$~.begin(0)} #=> [1,3]
0931デフォルトの名無しさん2009/12/03(木) 19:33:50
質問があります。
gemでrailsのuninstallしようとしたらエラーが出たのですが、どこがおかしいものなのでしょうか?
(railsといってもRubyGemsの一般的っぽいエラーなのでこちらでお聞きします)

sudo gem install rails しようとして、間違えて、
gem install rails してしまい、アンインストールしようと、
gem uninstall rails するのですが、

(Gem::InstallError) Unknown gem rails >= 0

と出てしまいます。

下記のようにすると、一応はアンインストールできるのですが、君が悪いです。
gem uninstall --install-dir ~/.gem/ruby/1.8 rails

解決する方法はないでしょうか?

環境:
・Ubuntu 9.04 (coLinux)
・ruby 1.8.7 (aptitudeで入れました)
・gem --version => 1.3.1 (aptitude で入れました)
09329312009/12/03(木) 19:35:00
また、gem install rails時に
gem search railsすると、ちゃんと rails 2.3.5が入っているとでます。
0933デフォルトの名無しさん2009/12/03(木) 19:39:23
>>931
> gem uninstall --install-dir ~/.gem/ruby/1.8 rails
それがユーザー権限インストールされたgemの正しいアンインストール方法です
0934デフォルトの名無しさん2009/12/03(木) 21:08:19
rm -rf ~/.gem
0935デフォルトの名無しさん2009/12/03(木) 21:13:16
>>927
ないです
09369312009/12/03(木) 21:25:54
sudo で入れても railsコマンドない言われました orz
また、gemで入れたはずのrakeもない言われたのですが、(gem searchだと出る)

どうやらubuntuのRubyGems特有のトラブルのようです。

Ruby on Rails インストールメモ (ubuntu 9.04) - Railsやねん。
http://d.hatena.ne.jp/gedit/20090626/1246008868


なので、自前で入れたら万事解決しますた!

解決しました。ありがとうございまいた。
>>933
あれそうなの?(´・ω・`)
0937デフォルトの名無しさん2009/12/04(金) 00:55:52
p [1,"",nil].compact
これでnilは消えるんですが
""を消す関数ってありませんか?
0938デフォルトの名無しさん2009/12/04(金) 01:26:22
rejectとかdelete_ifとか
0939デフォルトの名無しさん2009/12/04(金) 01:56:59
Rubyに関数なんてあり(略

nil は NilClass という極めて特殊な有名度のクラスのインスタンスだから特殊扱いの対象にできるけど、
empty は String クラスのオブジェクトの内部表現がたまたま空だという程度の意味しかないので
Array というクラスのメソッドで特殊扱いするほどの価値はないと考える

ということで、>>938の言うように、
「要素がStringクラスのオブジェクトで空な場合その要素を消す」という処理を行う

irb> p [1, "", nil].delete_if{|e| e.instance_of?(String) && e.empty?}
[1, nil]

うん、長いんだ
適当なメソッド名で掃き出すのをおすすめ
0940デフォルトの名無しさん2009/12/04(金) 06:38:15
p [1, "", nil].reject{|i|i==""}

非破壊的ならこっちで
reject(val)って何でないんだろう
0941デフォルトの名無しさん2009/12/04(金) 09:45:08
メソッド書くときって

  sayHello
  say_hello

のどちらで書くのがスタンダードですか
0942デフォルトの名無しさん2009/12/04(金) 09:56:36
前者は不可
0943デフォルトの名無しさん2009/12/04(金) 09:57:26
不可は SayHello だろ
09449412009/12/04(金) 10:11:32
http://www.loveruby.net/w/RubyCodingStyle.html

say_hello

の方が多いみたいですね。
sayHelloで書けと言われたのですが.....
0945デフォルトの名無しさん2009/12/04(金) 10:14:13
>>941
後者がスタンダードです

メソッド名やインスタンス変数はlower_name
定数名はUPPER_NAME
モジュール名、クラス名はCamlCase
というのがRubyの原則

例外はクラス名=メソッド名であるような場合
つまり、Regexp()やURI()のようなメソッドぐらいしか思いつかない
0946デフォルトの名無しさん2009/12/04(金) 10:18:22
>>944
会社(授業)の方針や規約で従うしかない、というのであればやむを得ない

でも、そうでないなら極力lower_nameにするべき
9割のライブラリは標準に従ってるし
09479412009/12/04(金) 10:22:39
C++で sayHello スタイルで書かれたライブラリを
Rubyに移植しろと言われたのですが、さてどうしたものか....
0948デフォルトの名無しさん2009/12/04(金) 10:25:06
sayHelloで書けと言われたならそうするしかないし
そうでないならRubyに合わせたほうがいい
そんだけでしょ
0949デフォルトの名無しさん2009/12/04(金) 10:32:17
>>947
状況によるんじゃね?
sayHelloでないと問題が起きそうだと思うなら、素直にsayHelloで
そうでなければ「Rubyではsay_helloの方が一般的なんです!」と主張
0950デフォルトの名無しさん2009/12/04(金) 10:35:43
>>947
そう書けと言われたならそう書くべき
それが嫌ならルールに物申すだけ

alias say_hello sayHello

というのをクラス内で自動生成させるという手もあるけど、
実際にメソッドが増えるから本質的な解決法にはならない
「Rubyで作ってRubyからアクセスするものなのにC++の流儀をわざわざ引き継ぐ理由は何ですか?」
というような質問をして、それでも曲がらなければそりゃ従うべき
0951デフォルトの名無しさん2009/12/04(金) 10:38:45
Rubyスタイルはもはや骨董品だし堅守すべきものでもないよ
0952デフォルトの名無しさん2009/12/04(金) 10:40:53
>>951
Rubyスタイルってなんですか?
0953デフォルトの名無しさん2009/12/04(金) 11:09:21
snake_case という言葉を知らないんだろうな

ぜんぜん一般的じゃないから知らない人のほうが多いが
俺も CamelCase なんかとの比較列挙のときしか使わん
「アンダースコア区切り」で一発で伝わるし
0954デフォルトの名無しさん2009/12/04(金) 11:10:30
ライブラリの単純なラッパー作るときはsayHelloのままにして、Rubyっぽいライブラリにする時にsay_hello
0955デフォルトの名無しさん2009/12/04(金) 12:15:25
>>939
ちょっと短いソースに挑戦してるとこだったので関数の形がよかったんです
ないのは残念
[゙゙,1] - [゙゙]これで我慢しときます
0956デフォルトの名無しさん2009/12/04(金) 13:20:36
snake_caseってハンガリアン記法のことじゃないの?
0957デフォルトの名無しさん2009/12/04(金) 13:24:29
いや全然
0958デフォルトの名無しさん2009/12/04(金) 13:30:37
ハンガリアン記法はハンガリアン記法でいいじゃないか
名前あるんだし
0959デフォルトの名無しさん2009/12/04(金) 15:37:37
[1,2,3,4,5].inject(0) {|result, item|
p result += item
}
こんな事が出来るイテレータって無いですか?


こんなのつくったんですが、なんか不恰好なので
class Array
  def letmap *h
    self.map do |m|
      yield m , h
    end
  end
end
[0,0,0].letmap(8) do |c,ph|
  p ph[0] += 1
end
0960デフォルトの名無しさん2009/12/04(金) 18:17:52
endが目立つなあ
0961デフォルトの名無しさん2009/12/04(金) 18:26:17
無理っぽいですね
replaceによる書き換えしか手段がないかも
0962デフォルトの名無しさん2009/12/04(金) 19:41:37
String文字列をRegexpにする関数ってないですか?
0963sage2009/12/04(金) 19:52:06
[1,2,3,4,5].inject(0) {|result, item| p result += item; result } こう?
0964デフォルトの名無しさん2009/12/04(金) 19:59:13
>>962
リテラルではなくてRegexpのコンストラクタ使うといいよ
0965デフォルトの名無しさん2009/12/04(金) 20:02:22
compile
0966デフォルトの名無しさん2009/12/04(金) 20:07:03
str = "hoge"
Regexp.new(str)
Regexp.compile(str)
/#{str}/
0967デフォルトの名無しさん2009/12/04(金) 20:07:28
Stringで与えられた正規表現をRegexpオブジェクトにするなら
Regexp.new(str)か/#{str}/
Regexp.compile(str)はnewの別名だから好みで

メタ文字がエスケープされていない「正規表現ではない」文字列を
RegexpオブジェクトにしたいならRegexp.escape(str)
0968デフォルトの名無しさん2009/12/04(金) 20:10:10
俺はRegexp.quoteのほうをよく使うな
0969デフォルトの名無しさん2009/12/04(金) 20:23:36
>>967
ありがとうございます
Regexp.new使います
0970デフォルトの名無しさん2009/12/04(金) 20:26:25
escape はエスケープするだけで、返されるのは String 。
Regexp オブジェクトにするにはそれをさらに Regexp.new なりなんなりしないと。
0971デフォルトの名無しさん2009/12/04(金) 20:27:37
>>963
injectは戻り値を置いておかなきゃいけないのが嫌なので作ろうとしてました
やっぱ引数には配列か構造体か関数でも渡さないとダメかなぁと
0972デフォルトの名無しさん2009/12/04(金) 20:36:56
>>970
そうだったthx
0973デフォルトの名無しさん2009/12/04(金) 21:14:28
injectはtapとの共用オススメ

(1..10).inject({}) { |r, x| r.tap { |e| e[x] = x ** 2 } }

え、面倒くさい?ですよねー
0974デフォルトの名無しさん2009/12/04(金) 22:10:00
質問です。
引数として受け取ったブロックを使って自身の特異メソッドを定義するメソッド、は
どのように書いたらよいでしょうか?

def define_singleton_method(sym, block)
class <<self
define_method(sym, block)
end
end

だと、スコープの関係で sym や block が見えなくなるし
文字列にして eval に渡すという方法だと block が渡せなくて困っています。
0975デフォルトの名無しさん2009/12/04(金) 22:13:31
>>971
合計だけなら、[1,2,3,4].inject(:+) でいいけど、ちょっと処理を作り込む時に悩むよなあ。
0976デフォルトの名無しさん2009/12/04(金) 22:25:43
class Object
  def define_singleton_method(name, &block)
    (class << self; self; end).send(:define_method, name, &block)
  end
end

x = Object.new
x.define_singleton_method(:hello) { |name| puts "hello, #{name}" }
x.hello('>>974')

#=> hello, >>974
09779742009/12/04(金) 22:31:24
>>976
おお、ありがとうございます!
そういう self の取得方法があるとは、全然気付きませんでした。

そっか、class...end も式で、最後に評価した値を返すんでしたね。
助かりましたっす。
0978デフォルトの名無しさん2009/12/04(金) 22:32:34
p Array.new(5) {|i| i } # => [0, 1, 2, 3, 4]

この0とか1はどこから出てくるのでしょうか?
iってnilじゃないの?
0979デフォルトの名無しさん2009/12/04(金) 22:35:34
インデックス(添え字)だよ。
0980デフォルトの名無しさん2009/12/04(金) 22:41:36
Array.new(size) {|index| ... }
って、|i|にはindexが入る「決まり」なのか。
0981デフォルトの名無しさん2009/12/04(金) 22:43:25
各要素のインデックスを引数にしてブロックを実行。
その評価結果を対応するインデックスの値とする。

p Array(5) {|i| i ** i}
=> [1, 1, 4, 27, 256]
0982デフォルトの名無しさん2009/12/04(金) 23:49:26
>>978
def yussu n
h = []
n.times do |index| h.push yield(index) end
h
end
p Array.new(5) {|i| i } # => [0, 1, 2, 3, 4]
p yussu(5) {|i| i }
0983デフォルトの名無しさん2009/12/04(金) 23:52:46
「ゆっす」って何
0984デフォルトの名無しさん2009/12/05(土) 00:22:29
ンデュールじゃね
0985デフォルトの名無しさん2009/12/05(土) 03:18:49
gem install hogehoge

で

ERROR: While executing gem ... (Gem::RemoteSourceException)
  HTTP Response 403

になるの俺だけ?
ぐぐっても「どうにもならんから新しいgemを手動でインストールした」
って感じのBlogがあっただけだったけど

>>682は解決したの?
0986デフォルトの名無しさん2009/12/05(土) 07:58:23
>>985
しばらくしたらたまに落ちます
0987デフォルトの名無しさん2009/12/05(土) 09:11:07
>>985
そういうのを書くときは gem -v と gem env の結果を書け。
たぶんおそらくきっと gem のバージョンが古いだけ。
0988デフォルトの名無しさん2009/12/05(土) 09:28:10
gemのリモートソースのurlって変わった?
0989デフォルトの名無しさん2009/12/05(土) 11:09:40
h = {"a" => 1, "b" => 2, "c" => 3}
p h

は問題ないのですが、

p {"a" => 1, "b" => 2, "c" => 3}

がsyntax errorになるのは何故でしょうか?
0990デフォルトの名無しさん2009/12/05(土) 11:32:17
ブロックの始まりの { と勘違いしてるとかじゃまいか

irb(main):010:0> p{|e|'a'}
=> nil

マニュアルにはなぜこうなるかは書かれていない悪寒
0991デフォルトの名無しさん2009/12/05(土) 11:33:35
>>989
[1,2,3].each{"a" => 1, "b" => 2, "c" => 3}

これがエラーになるのと同じ理屈
p の引数にカッコ省略でハッシュリテラルが来てると思われてるんではなく、
p がブロックつきメソッドで、その中に文法上不正なよくわからんコンマ並びデータがあると思われてる

p({"a" => 1, "b" => 2, "c" => 3})

と引数カッコを明示するしかないな
0992デフォルトの名無しさん2009/12/05(土) 11:38:50
あ、書いてあった。Ruby用語集より

> ブロック付きメソッド呼び出し
> コードの集まり(ブロック)を受け取ることのできるメソッドをブロック付きメソッド呼び出しと呼ぶ。
>
> ブロック付きメソッドの中ではyieldを使ってブロックを実行することができる。
> 当然のことながら、与えられたブロックをどのように処理するかはメソッド側に委ねられている。
> ので、***内部でブロックを評価しないメソッドにブロックを与えてもなにも起きない。エラーも起きない。***
0993デフォルトの名無しさん2009/12/05(土) 11:57:52
なるほどね良く気がつくなあ
質問者じゃないが納得した

省略可能なことが多すぎて優先順位とか知りきれてないことが多いなあ
実は優先順位が関わるあいまいな表現になってても
記述者(自分)としてはあいまいにしてるつもりはないから余計に混乱するw
0994デフォルトの名無しさん2009/12/05(土) 13:00:32
>>991
こういうのはRubyのよくないところだと思うな。
なんとかして欲しい。
0995デフォルトの名無しさん2009/12/05(土) 13:07:11
gems.rubyforge.orgじゃなくてgemcutterに変えればいいのか
なんでこんな重要なことなのに知ってる奴いないんだ
0996デフォルトの名無しさん2009/12/05(土) 14:06:00
>>995
そりゃ gem tumble 一発で済むからだろ

:~$ cat .gemrc
---
:verbose: true
:sources:
- http://gems.rubyforge.org/
:backtrace: true
:benchmark: false
:update_sources: true
:bulk_threshold: 1000

:~$ gem tumble
Thanks for using Gemcutter!
Your gem sources are now:
- http://gemcutter.org
- http://gems.rubyforge.org/

:~$ cat .gemrc
---
:benchmark: false
:verbose: true
:backtrace: true
:update_sources: true
:sources:
- http://gemcutter.org
- http://gems.rubyforge.org/
:bulk_threshold: 1000
0997デフォルトの名無しさん2009/12/05(土) 14:08:30
gemcutterくらい入れとけよw

まあ、たしかにgithubのgemサポート外されたから、
今度からgemcutterがメインになるだろうことはなんらかのなんらかがあってもいいな。周知させとかないと
0998デフォルトの名無しさん2009/12/05(土) 14:11:41
>>994
いや現状のこれが「なんとかした」結果だから
ハッシュリテラルの優先度は高くしないほうがいい
そもそものあれとしてメソッドに引数カッコなしで { } 記述のハッシュリテラルを渡すということ自体が稀
0999デフォルトの名無しさん2009/12/05(土) 14:16:08
>>989
中カッコを外すとかは?

p "a" => 1, "b" => 2, "c" => 3
1000デフォルトの名無しさん2009/12/05(土) 14:28:51
あ、1000もらいますね。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。