2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Ruby 初心者スレッド Part 32

1 :デフォルトの名無しさん:2009/10/24(土) 06:18:12
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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


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


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

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

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


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

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

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

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

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

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

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

cucumber 0.4.2
ruby 1.8.7
Windows Vista SP2

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

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

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

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

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

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

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

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

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


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

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


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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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



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

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

begin

a=0
if a==0
#end

puts "OK"

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

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

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

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

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

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

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


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

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

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

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

だと思う

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

rubygems-update-1.3.5 の記述

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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



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

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



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

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

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

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

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

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

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

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

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

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

134 :12:2009/10/28(水) 12:04:50
連投スマソ

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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



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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

ほほう

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

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

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

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


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

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

とするしかない。

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

正解

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

ArrayEmptyでした orz=3

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

インスト時には
wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
tar zxvf rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb --prefix $HOME

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

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

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

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

/re/ =~ str

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


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


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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

長くなってすいません。

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

system("command", hoge)

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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


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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

今はそういう時代。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

1.8.6とかSymbolとかシラネ

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


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

うーん、微妙。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

>>403
じゃあ、キボンヌ

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

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

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

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

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

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

a = max 0, a-1

が通りません。


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

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

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

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

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

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

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

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

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


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

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

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

hoge
<%= inner_erb.result %>
huga

これが

inner_erbのresult
huga

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

# gem install rspec

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

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

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

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

ことが分かりました。

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


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

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

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


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

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

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

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


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

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

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

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

# gem install rspec

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

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


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

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

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

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

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

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

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

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

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


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

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



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

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


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

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

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

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


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

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


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

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

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

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

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

なんでだろうね。


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

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

erb -x index.html.erb | less

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

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

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

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

教えてください

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

これがエラーになって

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

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

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

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

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

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

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

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

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

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

処理行1
処理行2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

class MyClass

def meth1
self.meth2
end

private
def meth2
puts 'hello'
end
end

myclass = MyClass.new
myclass.meth1

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

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

530 :517:2009/11/18(水) 12:55:46
selfつけといた方が自分のメンバー関数を呼んでる感が強くて気に入っていたのですが
なんかつけるなと言う意見の方が多いのでつけないことにします。
俺は少数派だったのか

531 :デフォルトの名無しさん:2009/11/18(水) 12:58:08
>>529
それはprivateの意義よりRubyの仕様が先にありきの考え方。
privateのそもそもの意味を考えれば上のコードでエラーを出すのはおかしいでしょ。
だってselfを付けても省いても意味は変わらないんだもの。
実際上のコードのselfを消せばエラーにならないわけだが、内部ではmeth2を呼ぶために結局selfを付けてる。

532 :デフォルトの名無しさん:2009/11/18(水) 13:00:02
>>531
どうして他の言語の動作を持ち込むの?

533 :デフォルトの名無しさん:2009/11/18(水) 13:02:51
>>531
それはおまえさんの理想や狭い常識のprivateありきの考え方だな

534 :デフォルトの名無しさん:2009/11/18(水) 13:03:54
その辺の仕様が糞なのは皆承知してます
1.9でちょいちょい変えようとしてたんだけど、1.9の方針が変わってしまい、なかったことに

535 :デフォルトの名無しさん:2009/11/18(水) 13:07:04
変なのは確かだが、違うと言われても困るよな

536 :デフォルトの名無しさん:2009/11/18(水) 13:14:21
>>534
そうだったのか。知らなかった

537 :デフォルトの名無しさん:2009/11/18(水) 13:16:48
そもそもユーザーレベルでクラス再オープン可能な言語にprivateとか無意味

538 :デフォルトの名無しさん:2009/11/18(水) 13:16:50
こまけぇこたぁいいんだよ

539 :デフォルトの名無しさん:2009/11/18(水) 13:21:19
protectedはさらに摩訶不思議

540 :デフォルトの名無しさん:2009/11/18(水) 13:25:19
全部所謂publicという超便利かつ超危なっかしい言語でいいと思うんだ

541 :デフォルトの名無しさん:2009/11/18(水) 13:27:59
このへんの話題はこっちではどうしようもないくせに揉めるから嫌

542 :デフォルトの名無しさん:2009/11/18(水) 13:33:15
いまさらprivateとかそんな根本的な仕様変えられたら逆に困るんだが。

543 :デフォルトの名無しさん:2009/11/18(水) 13:34:30
みんなそんなに有効活用してないから大丈夫

544 :デフォルトの名無しさん:2009/11/18(水) 13:35:24
>>540
ですよね。呼んではいけない関数を呼ぶプログラマーが悪い。


545 :デフォルトの名無しさん:2009/11/18(水) 13:37:13
privateでよかったと思ったことなんてまず無い
たいていは舌打ちして強制的に呼ぶ

546 :デフォルトの名無しさん:2009/11/18(水) 13:38:19
モダンPerlの世界へようこそ
第20回 Email::Sender:メールを送信する|gihyo.jp … 技術評論社
ttp://gihyo.jp/dev/serial/01/modern-perl/0020?page=1

この Email::Sender は日本語大丈夫なのかな。
メールの解説記事って添付や From: の日本語のことを書かないよね。

547 :546:2009/11/18(水) 13:39:00
すまん。誤爆した。

548 :デフォルトの名無しさん:2009/11/18(水) 22:26:12
>>547
かわいい

549 :デフォルトの名無しさん:2009/11/19(木) 14:06:09
あいうえお
かきくけこ
さしすせそ
さしすせそ
たちつてと

といった感じの文章を表示させるときに、
"さしすせそ"の文を1行消して表示させるにはどうすればいいですか?
よろしくお願いします。

550 :デフォルトの名無しさん:2009/11/19(木) 14:27:03
元のデータがどう格納されてるかに依存するよなあ
初心者ぽいと言えば初心者ぽいのだが

並び替えの機能が作られているまたは標準のArray#sortで望み通りだという場合には、
(行ごとに区切って配列にして)Array#uniq する

str = "あいうえお
かきくけこ
さしすせそ
さしすせそ
たちつてと"

arr = str.split(/\n/) # または str.split(/\r\n/)
puts arr.uniq.sort

あいうえおが例示であって、「1行」ごとに配列にしてsortしても思い通りの表示にならんという場合は
sort のブロック自力で書かんといかんな

551 :デフォルトの名無しさん:2009/11/19(木) 15:50:13
質問力が低すぎる

552 :デフォルトの名無しさん:2009/11/19(木) 16:09:01
ある程度慣れてくると質問の仕方ってのも分かるんだろうけど、
完全に初心者だとどういう情報を出したら良いのか分からないんじゃないの。
だから質問力が低いってなるんだろうけど、ここは初心者スレだよー

553 :デフォルトの名無しさん:2009/11/19(木) 21:13:30
メソッド呼び出しに、メソッド名の入った変数を使うことはできませんか?クラスが複数のメソッドを持っていて、どのメソッドを呼ぶか、動的に変えたいのです。やりたいことは以下のようなことです。

class Hoge
def echo_hoge
puts "hoge"
end
end

h = Hoge.new
str = "echo_hoge"
h."#{str}" # エラー

554 :デフォルトの名無しさん:2009/11/19(木) 21:24:41
通常はあまり推奨しない特に初心者
どーしても必要だという場合

h.__send__(str)

でオブジェクト h の str という名前のメソッドが引数なしで呼ばれる

h.__send__(str, param)

でいわゆる h.str(param) になる

555 :デフォルトの名無しさん:2009/11/19(木) 21:26:28
俺も初心者だけど、

h.send(str)

でどうかな?

556 :デフォルトの名無しさん:2009/11/19(木) 21:53:46
>>554-555
ありがとうございました。出来ました。

使う状況ですが、例えばHumanクラスがname age sexのアクセサを持っていたとして、そのうちどれかの値を欲しいとします。
そんなときはどのアクセサが欲しいかが動的に決まると思うのですが、そんなときに human.__send__(str) で取得しようとしました。
これはおかしな考えでしょうか?

557 :デフォルトの名無しさん:2009/11/19(木) 21:58:41
知らねーよ

558 :デフォルトの名無しさん:2009/11/19(木) 21:59:49
「そのうちどれかの値を欲しい」ってどういう状況かわかんないな
どうしてもそうなったら自分ならHash使う

559 :デフォルトの名無しさん:2009/11/19(木) 22:07:30
メソッド名を外部から入力させてそのまま使うということが普通はないと思う

def get_value_from(who, key)
case key
when 'name' then who.name
when 'age' then who.age
when 'sex' then who.sex
else raise ArgumentError, "Unknown parameter: #{key.inspect}"
end
end

human = Human.new
register_data(human)

puts "名前は #{get_value_from(human, 'name')} です"

560 :デフォルトの名無しさん:2009/11/19(木) 22:17:52
>>559
なるほど、受け取った文字列をメソッド名に使うんじゃなくて、そうやって分岐すればいいんですね。
勉強になりました、ありがとうございます。

でも、アクセサが増えるたびにwhenに追記するのは面倒じゃないですか?

561 :デフォルトの名無しさん:2009/11/19(木) 22:20:23
単なるデータならStruct使えばHash風にhuman[str]でアクセスできる

メソッドがくっついてるなら>>559みたいにやったほうがいい
もしくは対応テーブル作るかなぁ
table = { "name" => :name }
human.__send__(table[str])

変なことすれば自分が困るだけみたいな手抜きスクリプトなら
そのまま__send__しちゃうこともあるけどねw

562 :デフォルトの名無しさん:2009/11/19(木) 22:20:50
まあ、>>559のようなものなら>558のいうように内部ではHash
で持っておけば済むところだね。



563 :デフォルトの名無しさん:2009/11/19(木) 23:51:20
>>561-562
ありがとうございました。

564 :デフォルトの名無しさん:2009/11/20(金) 00:06:44
Stringの継承なんですが
class FOO < String
def get
self
end
def put(arg)
self = arg
end
end

foo = FOO.new
foo.put("aaa")
p foo
>ruby test.rb
test.rb:6: Can't change the value of self
self = arg
^
となってしまってselfを変更しようとすると怒られてしまうのですが
どうしたら変更できますか?

565 :デフォルトの名無しさん:2009/11/20(金) 00:11:30
>>564
String#replace

566 :564:2009/11/20(金) 00:17:46
>>565
即レスthx
String#replaceで望んだ動作です

#=の動作が変わっているのは何故なんだろう・・・(´-`)

567 :デフォルトの名無しさん:2009/11/20(金) 00:54:37
代入の=ってこれもどっかのクラスのメソッドなの?

568 :デフォルトの名無しさん:2009/11/20(金) 01:04:56
selfを変更するって発想がまずおかしい気がするが

569 :デフォルトの名無しさん:2009/11/20(金) 01:33:44
初心者ですいませんが質問させてください。

HP-UXでPostgreSQLとの連携のためにライブラリを入れたいのですが
どうしてもエラーしてしまいます。

OS : HP-UX 11iv2
Ruby : 1.8.7
PostgreSQL : 8.3
ライブラリ : pg-0.8.0

gemにてpg-0.8.0.gemをinstallすると下記のエラーが表示され
インストールできません。

mkmf.rb:345:in `%': numbered(1) after unnumbered(1) (ArgumentError)

ライブラリのパスがうまく認識していない?ようなのですが、
gemの起動時に--with-pg-lib, --with-pg-includeは指定しています。

何か原因として考えられるものがあればご教授ください。

よろしくお願いします。

570 :デフォルトの名無しさん:2009/11/20(金) 07:44:43
>>569
>mkmf.rb:345:in `%': numbered(1) after unnumbered(1) (ArgumentError)

このエラーでぐぐると、まさにHP-UXでエラーが発生したというレポートがある。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/322136
で、すでに修正されたとあるんだけど。
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/322143
2008年の時点で修正されたはずだから、もし再現するなら、本家メーリングリストで聞いたほうがいいと思う。

571 :デフォルトの名無しさん:2009/11/20(金) 07:47:02
>>569
>Ruby : 1.8.7
詳しいバージョン番号は?最新版は1.8.7-p174だから、もし古いのを使っているなら新しいのを使ってみるといいかもね。

572 :デフォルトの名無しさん:2009/11/20(金) 09:42:03
>>567
代入自体はメソッドではない。
が、メソッド呼び出しになる代入(のように見える操作)はある。

573 :デフォルトの名無しさん:2009/11/20(金) 10:21:27
「代入の表記と似せたように hoge= と末尾に = つき表記ができるメソッドを作ることができる」
が正解
hoge.foo=123 は代入ではなくただの「末尾に=記号がついたメソッド」
hoge.bar(123) であるのと同様に
hoge.foo=(123) であるだけ

ただし Ruby は末尾に等号を含むメソッドの解釈を便利に特殊扱いして
hoge.foo = 123 とメソッド名が空白で分断されているようになってても敢えて Hoge#foo= を呼ぶ

なにか = 値 というふうに書かれていた場合、「なにか」がその場所で変数であるかどうかで挙動が違う
変数であったら、本当に変数代入が行われる
変数ではなかったら、「なにか=」 という末尾等号メソッドへのアクセスが可能かどうかチェックされる
どれでもなかったら単にエラー

574 :デフォルトの名無しさん:2009/11/20(金) 22:44:51
>>573
Rubyの変数って具体的にどんな物?

575 :デフォルトの名無しさん:2009/11/21(土) 00:39:46
ローカル変数、グローバル変数、インスタンス変数、モジュール変数…あと何かあったっけ
とりあえず具体的にも何も、変数は変数でしか無いのだが

576 :デフォルトの名無しさん:2009/11/21(土) 01:08:26
=の右辺が数値の場合は、左辺に数値を渡す。
それ以外はポインターを渡す。
と思ってたのだが

577 :デフォルトの名無しさん:2009/11/21(土) 01:11:56
なんか訂正微妙に中途半端にめんどくさそうなレスだな

578 :デフォルトの名無しさん:2009/11/21(土) 02:18:33
変数に代入ってのは右辺が何かに関わらず
ある名前(変数)に右辺のオブジェクトIDを割り当てるってことでしょ

でどれでもない場合エラーなんてあるの?無ければ新しくその名前の変数が用意されるんじゃないのか

579 :デフォルトの名無しさん:2009/11/21(土) 02:29:19
構文エラーのことでは?
左辺にリテラルとか。

580 :デフォルトの名無しさん:2009/11/21(土) 03:09:51
あ、なるほどそりゃエラーだ

581 :デフォルトの名無しさん:2009/11/21(土) 05:22:00
リテラル(``とか%x)の動作を再定義することって可能ですか?

582 :デフォルトの名無しさん:2009/11/21(土) 07:00:11
>>581
出来ない。
なお``はメソッドでありリテラルではない。

583 :デフォルトの名無しさん:2009/11/21(土) 07:06:57
できない
それを許される言語はほとんどないと思う
似てるのはC++0x(ユーザー定義リテラル)とLisp(リードマクロ)か?

584 :デフォルトの名無しさん:2009/11/21(土) 09:35:04
>>578
右辺を解決して辿り着いたオブジェクトのIDに左辺を関連付ける
「動かされる」のは常に、変数名である左辺
何度も言われているが、ひとつのオブジェクトに付箋のようにぺたぺた貼り付ける変数名、というのが極めて感覚的に近い

585 :デフォルトの名無しさん:2009/11/21(土) 09:39:53
>>570
レスあるがとうございます。
そのページは私もググって見つけました。
直ってると思われるのにエラーするのでおかしいかなと。
とりあえず該当箇所のmkmf.rbを無理やり変更したらコンパイルは通りましたが
思ったとおりうまく動きません。(TT)

>>571
レスありがとうございます。
rubyのバージョンは1.8.7-p173です。
HPが配布しているバイナリファイルにてインストールしているのが
もしかしたらいけないのでしょうか。

586 :デフォルトの名無しさん:2009/11/21(土) 09:59:56
31bit符号付整数
シンボル
オブジェクトID

587 :デフォルトの名無しさん:2009/11/21(土) 10:20:29
>>585
よく分からないんだけど、gem install でインストールしているわけじゃない?
「gemにてpg-0.8.0.gemをinstall」って言葉もよく分からない
gemを使ってインストールするときは
gem install pg-0.8.0
等とするのが普通なんだけどね。
1. .gem っていう拡張子まで書いている理由がよく分からないな
2. どんなコマンドを実行しようとしたのかコピペだけでもしてくれた方が
解決しやすいと思う。
3. あと、該当箇所のパッチもしくは変更後の行のコピペ

4. それと、HPが配布しているバイナリファイルっていう言葉の意味が分からない?
HPからダウンロードしたの?
5. ruby -v の出力結果も書いてね。
5個の質問に答えてくれたら解決するまで付きやってやる

588 :デフォルトの名無しさん:2009/11/21(土) 18:43:03
オーバーライド元メソッドを呼び出すのにsuperというのがありますけどこれは
継承されていない状態では動かないようです

class A
def foo(arg)
p arg
end
end

class A
def foo(arg)
arg.concat "\n"
super(*arg)  #ここで元のA#fooを呼び出したい
end
end

この状態でオーバーライド元のメソッドをオーバーライドしたメソッドから呼ぶ事って可能ですか?

589 :デフォルトの名無しさん:2009/11/21(土) 18:46:59
上書きするまえにaliasで元のfooに別名を与える

590 :デフォルトの名無しさん:2009/11/21(土) 19:10:11
> オーバーライド元メソッドを呼び出すのにsuperというのがありますけど
いやそのりくつはおかしい

591 :デフォルトの名無しさん:2009/11/21(土) 19:10:48
では正しいりくつをおながいします

592 :デフォルトの名無しさん:2009/11/21(土) 19:12:12
class B < A
def foo(arg)
arg.concat "\n"
super.foo(*arg)  #ここで元のA#fooを呼び出したい
end
end


593 :デフォルトの名無しさん:2009/11/21(土) 19:22:48
overrideとoverwriteの違い

594 :588:2009/11/21(土) 20:49:20
調べてみたらオーバーライドじゃなくて再定義ですね。すみません

>>589
の方法で出来ました。ありがとう

595 :569:2009/11/21(土) 23:20:27
>>587
>1. .gem っていう拡張子まで書いている理由がよく分からないな
.gemファイルをローカルへDLしてからインストールしました。

>2. どんなコマンドを実行しようとしたのかコピペだけでもしてくれた方が解決しやすいと思う。
gem install /tmp/pg-0.8.0.gem
でインストールしようとしたのですが、間違ってたでしょうか?

>3. あと、該当箇所のパッチもしくは変更後の行のコピペ
単純にエラーした部分を削ってしまった
def libpathflag の中の

LIBPATHFLAG+RPATHFLAG

LIBPATHFLAG
だけに変更。
それが正しいのかはよく分かりませんがコンパイルは通りました。

>4. それと、HPが配布しているバイナリファイルっていう言葉の意味が分からない?
>HPからダウンロードしたの?
HPのウェブサイトにて、HP-UXの各種ツールがDLできますのでそちらから。
ttp://h50146.www5.hp.com/products/software/oe/hpux/component/network/ix/
ruby本体とrubygemはこれでインストールしています。

>5. ruby -v の出力結果も書いてね。
すいません、週明けまで環境を見ることができません。 来週確認して書き込みますね。

596 :チンパンジー愛ちゃん:2009/11/22(日) 00:17:53
細かい点をいくつか確認させてね
>>595で紹介しているサイトでは
6. コンポーネント名がHP-UX 11i v2、HP-UX 11i v3の二つあるんだけど
v2, v3どっちを使おうとしているの?

また、コンポーネントがどっちでもrubyのバージョンは
web1 A.13.00の項目で
Ruby A.13.00-1.8.7-p160.001 A.13.00-1.8.7-p160.001
とあるので、バージョンは1.8.7-p160ではないかと思っているんだけど、
>>585
> rubyのバージョンは1.8.7-p173です。
7. と言っている。このp173のrubyはどこから出てきた?

>>569では
> PostgreSQL : 8.3
> ライブラリ : pg-0.8.0
と言っている。
>>595のサイトを見ると
web1 A.13.00
PostgreSQL* A.13.00-8.3.7.001 A.13.00-8.3.7.001
とあって、PostgreSQLはいいんだけど、ライブラリpg-0.8.0ってのが分からないな
gemで配布されているのはpostgres-0.7.9で、最終更新日は2008年1月18日だったりする。
0.8.0というバージョンで探すと
一応、pgってのがあるんだけど、ChangeLogの最終更新日は2004年だ。

これはもう使われていないアダプタなので、マシンをネットにつなげれるのなら
gem install postgres
などとしてこちらのアダプタを使用するのが吉
8. pg-0.8.0を使わないといけない理由は、一緒に配布されていたから使おうとしています。
だったりしない?
それだけの理由かつ、サーバをネットにつなげれるのなら、postgres-0.7.9を使った方がよい。
ネットにつなげれなくてもpostgres-0.7.9.gemをダウンロードしてインストすればよろし。

597 :チンパンジー愛ちゃん:2009/11/22(日) 00:33:32
ごめんね、間違ってた
http://rubyforge.org/projects/ruby-pg
を見るとpgの方が更新日新しいみたい

pgを使う方が更新日的には正しそう

それと、インストール方法は
gem install /tmp/pg-0.8.0.gem
であってるよ

598 :デフォルトの名無しさん:2009/11/22(日) 01:03:06
WinXP-ProでRuby1.8.6です。MP3再生をしようと思っています。

先ず、ttp://mono.kmc.gr.jp/proj/rubysdl/?GyakubikiRubySDL#l11 の
「BGMを鳴らしたい」がありましたので、この sample.ogg を Test.mp3 
に変えました。
次に、SDLをインストールするため、ttp://rubyforge.org/frs/?group_id=1006
からDLし展開しました。

ところが展開したディレクトリにコマンドプロンプトのcdで移動し、ここで 
ruby install_rubysdl.rb をしたところ、

ruby: No such file or directory -- install_rubysdl.rb (LoadError)

となりました。どうしたら良いでしょうか? ( >install_rubysdl.rb としても駄目でした)
目的はMP3の再生なので特にSDLには拘りません。


599 :デフォルトの名無しさん:2009/11/22(日) 01:14:11
モジュールなんですが
module M
def M::func(x)
p x
end
end

M::func(123)
include M
func(123)
みたいにincludeしてもしなくても呼べるメソッドを定義することって出来ますか?
M::funcとfuncを2つ定義すれば出来ますがもうちょっとスッキリする方があれが良いなと・・・

600 :デフォルトの名無しさん:2009/11/22(日) 01:15:36
>>598
その場所にinstall_rubysdl.rbがないんじゃね?
dirって打ってあるかどうか確認して

601 :デフォルトの名無しさん:2009/11/22(日) 01:22:17
>>599
関数的メソッド形式として利用したいユーザーが、意図的にモジュールを include する
それ以外はやっちゃだめだしトップレベルで include されてると期待してもだめ

602 :598:2009/11/22(日) 01:53:40
>>600
早速のレスさんきゅうです。
install_rubysdl.rbは、やはりありません。

上で書いた通り、SDLによるMP3に拘りませんので
どなたかご教授願います。
(手元の本やGoogleでもSDLの方法しか見つかりません)


603 :デフォルトの名無しさん:2009/11/22(日) 02:16:35
>>602
本当に再生さえ出来ればいいのならこんな方法もある
コマンドラインから再生できるプログラムを用意(以下の例ではmplayerを使用)して
mp3_filename = 'hoge.mp3'
system("mplayer #{mp3_filename}")
ffplayでも出来ると思うけどうちでは再生が安定しなかった・・・

あとlibmplayer.dllを使っても再生できそうだけどDLLのリファレンスが見あたらないな・・・(汗

604 :デフォルトの名無しさん:2009/11/22(日) 02:31:29
>>602
OLEを使う方法もあるな
ttp://www.google.co.jp/search?hl=ja&q=VBA+mp3+%8D%C4%90%B6

ただWIN32OLEは実装が微妙なところがあるので1.8.xだとひょっとしたらダメな可能性はある・・・

605 :デフォルトの名無しさん:2009/11/22(日) 05:44:58
MCIは微妙だからwaveout使う方がいいよ

606 :デフォルトの名無しさん:2009/11/22(日) 07:46:56
>>604
WIN32OLE、完成度高いと思って使ってた。。。
どのへんの実装が微妙なのか教えていただけませんか?

607 :デフォルトの名無しさん:2009/11/22(日) 07:50:25
>>599
module_function

608 :デフォルトの名無しさん:2009/11/22(日) 08:14:24
>>606
すまん。詳細は忘れたorz
以前に1.8.xのWIN32OLEが実装不十分で正常に実行できないのがあった
その時ググっていたら1.9.xのいくつかで改善されたらしいとどこかに書いてあったのだが・・・

609 :デフォルトの名無しさん:2009/11/22(日) 08:25:51
>>606
1.8で使ってるが問題起こったことは無い
他人の意見を鵜呑みにするなという良い例

610 :デフォルトの名無しさん:2009/11/22(日) 08:34:47
>>608-609
dです。
自分で問題にぶつかるまであまり気にしないことにします。

611 :デフォルトの名無しさん:2009/11/22(日) 08:49:06
思い出した
ttp://www.google.co.jp/search?hl=ja&q=InvokeVerb+win32ole
文法的な誤りではないので原因の特定までにかなり手こずった記憶がある
>>604の方法と関係があるかは確認していないけど、何らかの罠が有る可能性は
頭の隅に置いておいた方が良いかも

612 :デフォルトの名無しさん:2009/11/22(日) 10:33:44
Windows用の One-Click Installer の 1.9.1 はいつ頃出るのでしょうか。

613 :569:2009/11/22(日) 10:45:35
>>596
>6. コンポーネント名がHP-UX 11i v2、HP-UX 11i v3の二つあるんだけど
>v2, v3どっちを使おうとしているの?
>7. と言っている。このp173のrubyはどこから出てきた?
すいません、先に貼ったURLだとp160だったのですが、実際のDLページだと
p173になっており、実際にDLされたものもp173でした。
ちなみにUP-UXは11.23なので11iv2でDLしています。
ttps://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPUXIEXP1123

614 :デフォルトの名無しさん:2009/11/22(日) 10:47:26
>>612
出所を思い出せないから、本当かどうかは怪しいが
「もう出ないからRubyInstaller使ってね」って話がどこかにあったような

615 :デフォルトの名無しさん:2009/11/22(日) 10:59:09
>>598
コマンド起動してもいいなら、mplayer.exe だな。autotestで音鳴らすのに、これ使ってる。

616 :デフォルトの名無しさん:2009/11/22(日) 11:08:39
すんませんいきなり話題変わります。
Ruby/Tkでエントリーを表示すると
その中身は文字列になりますよね?
その文字列を数値にして、もしできなかったら(文字でできていたら)
エラーを返すにはどうすればいいですか?
計算機みたいなのをつくりたいんです。
初心者ですいません。


617 :デフォルトの名無しさん:2009/11/22(日) 11:18:17
ものすごおおおおおく単純には、その文字列が目的の文字だけ含む正規表現にマッチするかどうかを調べる

if /[1234567890]+/ =~ str then
puts '全部数字です'
else
puts '数字以外のものが入っています!'
end

618 :デフォルトの名無しさん:2009/11/22(日) 11:22:53
Integer(str)でよくね

619 :デフォルトの名無しさん:2009/11/22(日) 11:48:23
>>618
小数点入れたいというときに少し困る
それに、Integer() も Float() も例外をキャッチしないといけない
例外をキャッチできるような人はそもそもマニュアル読んで自力でできるはず
>>616の質問の書き方からしてまだそれは無理
だからわざわざ /[0-9]+/ ではなく /[1234567890]+/ と書いた

620 :デフォルトの名無しさん:2009/11/22(日) 11:48:58
>>614
どうもです。そうですか、1.91は出ないですか。そう言えば1.87も出てませんね。
自力でコンパイルなんてできないのでOne-Click Installerは本当にありがたかったのですが。
正規表現の戻り読みを使いたかったのですが。

621 :チンパンジー愛ちゃん:2009/11/22(日) 11:50:29
>>617
のだと、マイナスや小数点、指数表記などが扱えないので、
str.to_f
が賢いと思う 文字列で出来ているときは
0.0
が返ってくるので、この時は本当は0が入っているか
再度文字列チェックすればよい

622 :デフォルトの名無しさん:2009/11/22(日) 11:56:52
>>621
String#to_f で変換されるものと変換されないものの区別を自分でつけることはできる?
というか既にその処理「バグって」るだろ
最後の処理がとても非本質的
今の自分に必要なものだけ正規表現で通したほうがいい
小数が入って欲しくないかもしれないし、負の数が入って欲しくないかもしれない

623 :デフォルトの名無しさん:2009/11/22(日) 12:09:18
>>620
ActiveScriptRubyじゃダメ?

624 :デフォルトの名無しさん:2009/11/22(日) 12:29:23
>>618>>621のような人にはこれを見せることにしてる
irb> p "1_2_3".to_f
123.0
irb> p Integer("1_2_3")
123


625 :デフォルトの名無しさん:2009/11/22(日) 12:36:33
>>623
すみません、「ActiveScriptRuby」と「One-Click Installer」ってどう違うのでしょうか?
ちなみに今の1.86は One-Click Installerで入れました。

626 :デフォルトの名無しさん:2009/11/22(日) 12:53:22
ActiveScriptRubyの1.9.1安定版って、まだ出てないんじゃなかったっけ

627 :デフォルトの名無しさん:2009/11/22(日) 13:19:37
>>616 です
有難うございます。
解決しました。

628 :デフォルトの名無しさん:2009/11/22(日) 13:24:32
>>626
ホームページを見ると、Ruby-1.9.1-p243 Microsoft Installter Package(2009/7/20)
っていうのがあるけど、どうなんだろう?

ActiveScriptRuby and Other packages
http://www.artonx.org/data/asr/

ここのはどうなん?

Rumix - Ruby Starter Package with Installer
http://ruby.morphball.net/rumix/

629 :デフォルトの名無しさん:2009/11/22(日) 15:23:40
>>625
自分もよく知らないです。
どれ入れても大丈夫のような気はするけど。。。

Ruby/インストール - いなた屋 - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/inataya/d/Ruby/%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

630 :デフォルトの名無しさん:2009/11/22(日) 19:37:32
1.8.7を使いたければ、ActiveScriptRubyがいい。
One-Click Installerはまだ1.8.6しかなかったような気がする。


631 :デフォルトの名無しさん:2009/11/22(日) 22:02:48
Rubyを使うならMacかUbuntuにしておけ。
Windowsは窓から投げ捨てろ(窓だけに)

632 :デフォルトの名無しさん:2009/11/22(日) 22:06:38
晒し

633 :デフォルトの名無しさん:2009/11/22(日) 22:08:00
あげ

634 :デフォルトの名無しさん:2009/11/22(日) 22:24:00
「Windowsは窓から投げ捨てろ(窓だけに)」


き、決まったお (`・ω・´)シャキーン

(;´・ω・) あ、あれ・・・


(´;ω;`) ブハッ

635 :デフォルトの名無しさん:2009/11/22(日) 22:30:17
>>631

636 :デフォルトの名無しさん:2009/11/22(日) 22:38:45
サブイ

637 :デフォルトの名無しさん:2009/11/22(日) 23:16:20
pearlの後だからってrubyもさ(ry

638 :デフォルトの名無しさん:2009/11/22(日) 23:22:48
画像のサムネイルを作るのに便利なRubyのライブラリはありませんか?
レンタルサーバでも使えるように極力別のライブラリをインストールしなくてもいいようなものが良いです


639 :デフォルトの名無しさん:2009/11/22(日) 23:25:15
特にはないです

サムネイル作成が可能なプログラムをレンタルサーバにインストールして
sysytem メソッド等から直接呼んでください
たぶん一番早いし速いです

640 :デフォルトの名無しさん:2009/11/22(日) 23:30:28
画像処理系は基本的にlibjpegとかlibgifとかのラッパーだからなー。
このあたりは使う前提じゃないと見つからないんじゃないだろうか。


641 :デフォルトの名無しさん:2009/11/23(月) 00:04:39
レンタルサーバだと、プログラムのインストールが不可能だったりするし
難しいだろうな
PNGならRuby/PureImageで拡大縮小できるが・・・

642 :デフォルトの名無しさん:2009/11/23(月) 00:06:25
そういえばRMagickの開発を引き継いだ香具師はまだいないのかな。


643 :デフォルトの名無しさん:2009/11/23(月) 00:19:23
画像を外部ライブラリなしで操作できるスクリプト言語ってあんましないよね
実際的な速度で動作するとかまずないし

644 :デフォルトの名無しさん:2009/11/23(月) 00:28:50
WinXP(Ruby1.8.6)

下記コードで指数の値(val0)を出力したところ、
同じ値(1.0)のまま動きません。原因は何でしょうか?

count = 0
while
count+=1
break if count > 100 # 100回で終了
sleep 1
val0 = Math.exp(count/10)
puts "1sec #{count} #{val0}"
end


645 :デフォルトの名無しさん:2009/11/23(月) 00:31:24
count/10.0

646 :デフォルトの名無しさん:2009/11/23(月) 00:31:38
うおー、空 while なんて2年ぶりくらいに見た

Math.exp(count/10) の代わりに count/10 を表示してみればわかるかも

647 :デフォルトの名無しさん:2009/11/23(月) 00:49:58
>>645
さんきゅう


>>646
作法上ダメなんですか?


648 :638:2009/11/23(月) 00:50:21
やっぱり別のコマンドや画像所理ライブラリが必要なんですね
ありがとうございました

649 :デフォルトの名無しさん:2009/11/23(月) 01:20:55
>>647
>空 while
ダメって事はないけど

>>644みたいな例だと
(0...100).each{|count|p count}
とか
Range.new(0,100,true).each{|count|p count}
とか書くのが一般的じゃないかな

でも、自分の好きな方法で良いと思うよ

650 :デフォルトの名無しさん:2009/11/23(月) 01:41:51
whileやuntilやloopなどは
条件とか中の処理を間違えると無限ループしてしまう可能性がある
初心者は誤って無限ループを作ってしまうし、慣れた人でも結構気を使う

でも、(0...100).each は
中で余程おかしな処理を書かない限りまず無限ループにならない
回数が決まっているループなら、eachを積極的に使ったほうが良いと思うよ

651 :デフォルトの名無しさん:2009/11/23(月) 01:44:05
100回って決まってるなら、100.timesを使うなあ。
(0...100).eachってのは何の影響?

652 :デフォルトの名無しさん:2009/11/23(月) 01:52:09
>>651
カウンタにこだわらず「なんでもいいから100回」ならそれでいいけど
今回は厳密に「1から100まで」と数字に意味があるからね

ただ書き換えるなら1..100だと思うし、Range.newが一般的というのは同意できない

653 :デフォルトの名無しさん:2009/11/23(月) 04:58:15
101回じゃないのか

654 :デフォルトの名無しさん:2009/11/23(月) 05:15:53
ループの書き方なんて他人から押しつけられる物じゃないんだし
自分が困ったらよりよい方法を探せば良いだけでしょ

#メソッド+ブロックによるループは他言語ではあまり見ない気がするので
#Ruby初心者は理解しにくいかもね

655 :デフォルトの名無しさん:2009/11/23(月) 06:33:54
>>649
それ101回
わざわざバグらせてくれてありがとう

656 :デフォルトの名無しさん:2009/11/23(月) 06:37:12
これで誰が自演してたか明らかになったな

657 :デフォルトの名無しさん:2009/11/23(月) 06:51:34
なんで Integer#times のようなものがあるかというと、構成要素が1個で少なくて済むから
Range#each も結果的動作は同じだけれど、開始位置と終了位置の2要素が必要

>>644が悪手なのは while だからなのではなく

 ・ 無限 while
 ・ break で自力で抜ける
 ・ カウンタを初期化する、初期値は0
 ・ カウンタのインクリメントはループの初めに書く
 ・ メインの処理回数は100回で終了する
 ・ ただしカウンタは100はOKで、100を超えたときにbreakする

というように構成要素がやたら多いから
100.times{|i| … } のほうが間違わなくていいだろ

658 :デフォルトの名無しさん:2009/11/23(月) 07:22:50
>>653 >>655
100回だ。Rangeリテラルの説明を読め

659 :デフォルトの名無しさん:2009/11/23(月) 07:42:36
(1..100) と (1..100) は違うからな

ただの罠だが
特に2ch

660 :デフォルトの名無しさん:2009/11/23(月) 07:43:42
足りなかったので置いとく
.

661 :デフォルトの名無しさん:2009/11/23(月) 08:23:26
Rubyってそんな..と...の違いとかバグ産みやすい言語なんかw

662 :デフォルトの名無しさん:2009/11/23(月) 08:36:10
>>659
フォントの関係が違いがわからん・・・

663 :デフォルトの名無しさん:2009/11/23(月) 08:49:23
実際、.. と ... の機能を分けるのは問題が多いよな
ぱっと見で意味が分かりにくいし

664 :デフォルトの名無しさん:2009/11/23(月) 09:10:49
やっぱり neko operator のほうがいい?

0 ^..^ 100

665 :デフォルトの名無しさん:2009/11/23(月) 09:16:19
ここはきゅうり演算子を実装すべき
0 (::) 100

666 :デフォルトの名無しさん:2009/11/23(月) 09:22:30
.. と ... を使い分けるのって perl 由来だっけ? awk だっけ?

667 :デフォルトの名無しさん:2009/11/23(月) 09:23:26
こんなのも見つけた
ttp://slashdot.jp/~YamaKenZ/journal/312265

[3,7] → 3..7
(3,7] → 3!..7
[3,7) → 3..!7
(3,7) → 3!..!7

668 :デフォルトの名無しさん:2009/11/23(月) 09:34:48
>>667
これいいね。rubyでも採用してほしい


669 :デフォルトの名無しさん:2009/11/23(月) 11:13:16
>>668
先生!配列の [3, 7] と 閉区間の [3, 7] の区別がよくわかりません!

670 :デフォルトの名無しさん:2009/11/23(月) 11:15:10
対応表をよく見て見ろ

671 :デフォルトの名無しさん:2009/11/23(月) 11:19:40
Range.newでいいじゃん

というかフツーは数字のほうをいじって2ドットで書けるように使うと思う
3ドットはあまり見ない

672 :デフォルトの名無しさん:2009/11/23(月) 11:19:41
ここまでこれ以上妙な記法増やすなヴォケというレス無し

673 :デフォルトの名無しさん:2009/11/23(月) 11:24:53
これ以上記号ふやすのヤメレ

674 :デフォルトの名無しさん:2009/11/23(月) 11:59:33
=!=
とか
===
とか
使ってるのはPHPだっけ?

675 :デフォルトの名無しさん:2009/11/23(月) 12:02:47
>>671
ほんとは記号のほうをいじるべきなんだけどね
さすがに紛らわしい

676 :デフォルトの名無しさん:2009/11/23(月) 12:24:28
そこでAPLですよ

677 :デフォルトの名無しさん:2009/11/23(月) 13:33:22
>>674
=!=じゃなくて!==な
暗黙の型変換をしないで厳密に比較する演算子

678 :デフォルトの名無しさん:2009/11/23(月) 13:36:54
CGIやその他から受け取った入力を同じ形式でファイルにダンプ(Marshal使用)し、
後で取り出すプログラムを書いています。
取得時にはダックタイピングで区別なく保存データを作成していますが、
別のタイミングで復元しようとすると、CGIからの入力に関してCGIモジュールの依存が残っていて(?)
"CGIモジュールがない"とエラーになってしまいます。
保存時にto_sなどを加えてみたのですが、変わりません。

純粋に文字列だけを取り出し、CGIオブジェクトの依存を切るにはどうしたらいいのでしょうか?
Ruby1.8.7です。

679 :デフォルトの名無しさん:2009/11/23(月) 14:16:02
>>678
・ Marshal.load する前に、復元後のオブジェクトが存在するために必要なクラスを含む全モジュールを require しておく
・ 必要なデータだけを適当なキーの Hash オブジェクトにでもまとめ、その Hash だけをまーしゃるする

後者推奨

680 :デフォルトの名無しさん:2009/11/23(月) 14:27:44
>>678
まず第一に、今あえて古い cgi.rb を使うのはおすすめしない
webrick/cgi や Rack に切り替えた方がいいと思う

で、純粋な文字列を取り出す方法としては、次の手がある

pure_str = String.new(cgi['key1'])

>>679
それだと結局、CGIの依存は切れないんじゃ?

681 :678:2009/11/23(月) 15:13:19
>>679-680
ありがとうございます。
実は>>679で挙げていただいた後者の方法をとっていました。
>>680に挙げていただいたStringを新たに生成する方法で解決できました。

webrick/cgi、Rackともノーチェックでしたので、これから確認してみようと思います。
ありがとうございました!

682 :デフォルトの名無しさん:2009/11/23(月) 19:05:33
コマンドプロンプトでtest-specをインストールしようとしたら下記のようなエラーが出ます
二日間何回か試してるのですがインストールできません
403エラーではないのでしょうか・・・
C:\Documents and Settings\Owner>gem install test-spec
ERROR: While executing gem ... (Gem::RemoteSourceException)
HTTP Response 403


683 :デフォルトの名無しさん:2009/11/23(月) 19:11:13
gem install --verbose でやってみて。



684 :デフォルトの名無しさん:2009/11/23(月) 19:15:23
やってみます!

685 :デフォルトの名無しさん:2009/11/23(月) 19:17:50
こういうの見るとやってから書き込めよといつも思う

686 :デフォルトの名無しさん:2009/11/23(月) 19:32:04
>>685
--verboseつけたら解決するかも! とか初心者に分かるわけねーだろ

687 :デフォルトの名無しさん:2009/11/23(月) 19:38:33
解決というより、状況がより詳しく分かる、ってだけだがな。


688 :デフォルトの名無しさん:2009/11/23(月) 19:42:19
>>686
違う

689 :デフォルトの名無しさん:2009/11/23(月) 19:47:43
>>686
やってみますのレスはいらないってことでしょ

690 :デフォルトの名無しさん:2009/11/23(月) 19:50:34
まったく返事がなかったらなかったで
回答者は不安に思うかもしれないから多少の合理性はある
だいいちたった一行のレスにそんなに目くじらたてることでもないでしょ

691 :デフォルトの名無しさん:2009/11/23(月) 19:52:35
ねえよ
どんだけ秒速の世界に生きてんだよ

692 :デフォルトの名無しさん:2009/11/23(月) 20:10:02
2ちゃんをチャットと勘違いしてるアホなんだろ

693 :デフォルトの名無しさん:2009/11/23(月) 20:11:47
691は余裕のない世界に生きてる人なんですね

694 :デフォルトの名無しさん:2009/11/23(月) 20:56:49
フグ毒って怖いんだね

695 :デフォルトの名無しさん: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
という表示がされました

解決方法がさっぱりわかりません
どなたか知っている方がいれば教えていただけるとありがたいです

696 :デフォルトの名無しさん:2009/11/23(月) 23:58:13
>>690
それって要するに書いても書かなくても同じくらい不快を与えかねないってことだから、
最適化する意味で、やっぱり書かないのがベターだな。

697 :デフォルトの名無しさん:2009/11/24(火) 00:09:53
>>695
Railsはスレ違い
あとコマンドプロンプトが「何も入力できない」状態になるのはそりゃ当たり前なんじゃね

698 :デフォルトの名無しさん:2009/11/24(火) 00:43:48
まるち

699 :デフォルトの名無しさん:2009/11/24(火) 06:11:49
マルチ氏ねはともかくCtrl+Breakで止まるといいね

700 :デフォルトの名無しさん:2009/11/24(火) 14:58:06
acceptに入っちゃうとCtrl+Cで止まらないんだよねぇ・・・

701 :デフォルトの名無しさん: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)

702 :デフォルトの名無しさん:2009/11/24(火) 15:01:26
>>695
要するに正常位

703 :デフォルトの名無しさん:2009/11/24(火) 15:11:07
>>701
それなんて Proc ?

def f(x)
puts x
end

foo = Proc.new {|arg| f(arg) }
# 百年後
foo.call('Hello!')


704 :デフォルトの名無しさん: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

705 :デフォルトの名無しさん: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)

こういう事ではなくて?

706 :デフォルトの名無しさん:2009/11/24(火) 15:48:47
>>703
すばやい回答ありがとうございます。

>>705
これでほとんどできてますが、
f(x)の中身がややこしいので、そこはそのままいきたい。
def f(x) p x end
のままで、Foo.new(f.to_proc).bar(2)
で渡そうとしたのですが、引数の数が違うと怒られます。
う〜む・・・。

707 :デフォルトの名無しさん: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)


708 :デフォルトの名無しさん:2009/11/24(火) 15:50:37
あぁ、そうか、fはProcを返さないといけないのか・・・。
簡単に書けないのかなぁ・・・。

709 :デフォルトの名無しさん:2009/11/24(火) 15:51:46
ミスった、ブロック呼び出しをサポートはこういう目的
foo = Foo.new{|x| f(x) }.bar(2)

710 :デフォルトの名無しさん:2009/11/24(火) 15:52:07
コンビネータとかカリー化とか出てきそうな予感


711 :デフォルトの名無しさん:2009/11/24(火) 15:59:59
>>707
視認で変更したら通らないので、コピペしたら
methodにわたすfの前にコロンがついていました。
アンドとコロンの意味は不勉強につき分かっていませんが、
これで完全に解決です。
ありがとうございました。

712 :デフォルトの名無しさん:2009/11/24(火) 16:03:45
>>709
おぉっ!
綺麗にかけますね。

ちなみに私はC++のヘビーユーザーですが、
Rubyの簡潔さに浮気しています。

713 :デフォルトの名無しさん:2009/11/24(火) 16:26:36
一応フィードバック:

methodの引数にはSymbolを渡せばいいらしい。
ttp://tinyurl.com/y8avpyg

アンド記号とかアスタリスク記号の説明は
マニュアルの「メソッド定義」のところにある。
ttp://tinyurl.com/ylzu859

みなさん、ありがとうございました。

714 :デフォルトの名無しさん:2009/11/24(火) 18:12:52
ルヴィーの素晴らしさを教えてください。
僕は開発者が日本人なのが誇らしくて使っていますが、
皆さんはどうでしょうか。

715 :デフォルトの名無しさん:2009/11/24(火) 18:13:30
Rubyの標準クラスライブラリは重武装で便利だけど
バイナリとして配布しようとするとだいぶ冗長になってしまう・・・
標準クラスライブラリがもうちょっと細分化されたビルドって無いですかね?

プラットフォームはWin32です

716 :デフォルトの名無しさん:2009/11/24(火) 18:24:19
LLVMを使って自作の実装を作るんだ!

717 :デフォルトの名無しさん:2009/11/24(火) 18:40:09
なんでLLVMが使われないんだろうな。
YARVをマルチコア対応に書き換えるよりは手間もかからんし
パフォーマンスも向上すると思うが。

718 :デフォルトの名無しさん:2009/11/24(火) 20:20:13
rubyでstatic変数の代わりになるような手段は何か用意されて無いですか?
やりたいことはLispみたいに
クロージャに状態を持たせるようにしたい

719 :デフォルトの名無しさん:2009/11/24(火) 20:47:41
>>715
exerb

720 :デフォルトの名無しさん: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

721 :デフォルトの名無しさん:2009/11/24(火) 21:05:29
>>718
Lisp みたいにクロージャを使えばいいじゃない。
lambda とか proc とかつい最近でも言ってるじゃない。

722 :デフォルトの名無しさん: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


723 :デフォルトの名無しさん:2009/11/24(火) 21:11:52
Rubyは昨今のマルチコアCPUプラットフォーム上での効率的なプログラミングをサポートしますか?

724 :デフォルトの名無しさん:2009/11/24(火) 21:41:08
>>722
ほ〜そんなことができるのか
あんま理解してないけどlambdaおもしろそうだな

725 :デフォルトの名無しさん:2009/11/24(火) 21:49:22
>>723
MRIやYARVは対応していません
他の実装は知らん

726 :デフォルトの名無しさん:2009/11/24(火) 22:27:44
>>722
やりたかったのはそれです・・!
rubyすげ・・


727 :デフォルトの名無しさん: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で記述するのは難しいでしょうか?
もっといいやりかたがあればそれも参考にしたいです
よろしくお願いします

728 :デフォルトの名無しさん:2009/11/24(火) 23:54:41
>>727
それはRubyの質問ではなくて画像処理プログラミングの質問ではないのか?
〜のようなアルゴリズムをRubyで記述したいとからなともかく

#Ruby(インタプリタ全般に言えることだが)で画像処理は遅いぞー

729 :デフォルトの名無しさん:2009/11/25(水) 00:02:21
>>727
他スレ行くにしてもこれ読んでからいったら?
ttp://www2.starcat.ne.jp/~fussy/algo/algo1-1.htm

730 :デフォルトの名無しさん:2009/11/25(水) 00:24:44
適当に中間色置けばーとか適当な返事

731 :デフォルトの名無しさん:2009/11/25(水) 01:45:09
Rake であるタスクを行う前に,依存関係のない別のタスクを
実行させるにはどうしたらいいでしょうか?
タスクを実行するまえに,clean したい...

732 :デフォルトの名無しさん:2009/11/25(水) 05:43:51
だいたいオブジェクトってなんですか?

733 :デフォルトの名無しさん:2009/11/25(水) 06:01:07
>>732
たくさんプログラムを書けばそのうちわかってきます

734 :デフォルトの名無しさん:2009/11/25(水) 07:59:31
>>731
依存関係のないタスクは呼び出されないのが当たり前。だって依存関係がないんだから。
呼び出したかったら、自分で明示的に呼び出すしかない。

>>726
>やりたかったのはそれです・・!
>rubyすげ・・
このくらい、ほかの多くの言語でも出来る。さほどRubyの強みというわけでもない。


735 :デフォルトの名無しさん:2009/11/25(水) 08:28:44
rake のいちばん根っこの部分の記述はとても原始的

736 :デフォルトの名無しさん:2009/11/25(水) 09:25:12
むしろクロージャーのないスクリプト言語を探すほうが難しいよね

737 :731:2009/11/25(水) 11:47:46
あるタスク内から,別のタスクを明示的に呼び出す方法を
教えていただけないでしょうか?



738 :デフォルトの名無しさん:2009/11/25(水) 12:15:17
Rake::Task['タスク名'].invoke


739 :デフォルトの名無しさん:2009/11/25(水) 13:58:08

http://www.yomiuri.co.jp/national/news/20091125-OYT1T00541.htm

740 :デフォルトの名無しさん:2009/11/25(水) 18:32:12
>>739
>発表では、増村容疑者は昨年10月17日頃、デジタル録画画像のコピー制限を解除
>し、無制限にダビングできるソフトを、松山市内の大学生(19)に650円で、茨
>城県内の男性会社員(28)には850円でそれぞれインターネットを通して販売
>し、著作権を侵害した疑い。

もし、無制限にダビングできるソフトを無料配布していた場合は、どうなったのだろうか?
てゆーか、今後は、無料配布されるようになるでしょ。

741 :デフォルトの名無しさん:2009/11/25(水) 18:55:22
>>740
スレ違い

742 :731:2009/11/25(水) 20:33:45
>>738
ありがとー.

743 :デフォルトの名無しさん: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して呼べるようになりますか?

744 :デフォルトの名無しさん: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;
}

745 :デフォルトの名無しさん:2009/11/25(水) 23:05:55
>>744
C++の関数がよくわからないんで読み間違ってるかもしれないけど
Enumerable#partitionかなあ

746 :デフォルトの名無しさん: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 が使えないのが不満なのです。

747 :デフォルトの名無しさん:2009/11/25(水) 23:37:06
冗談きつい

748 :デフォルトの名無しさん: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"] を返します」


749 :デフォルトの名無しさん:2009/11/25(水) 23:57:39
with_index


750 :デフォルトの名無しさん: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

751 :デフォルトの名無しさん:2009/11/26(木) 00:13:44
+するならどっちにしろオブジェクト生成は不可避だろうさ。
というか、やりたいのはもしかしてsliceじゃなくてsortなんじゃない?

752 :デフォルトの名無しさん: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"]

ていうかそもそもこれでいいのか? なんか需要違わね?

753 :デフォルトの名無しさん: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もできそうですけど、
順序の指定が面倒くさそうなので試してません。

754 :デフォルトの名無しさん:2009/11/26(木) 00:24:21
>>750

>>749
を反映していません。

>>753

>>752
を反映していません。

755 :デフォルトの名無しさん:2009/11/26(木) 00:26:22
p %w(a b c d e f).sort_by.with_index {|o, i| i % 2 * 100000 + i}
汎用性とか知ったことか

756 :デフォルトの名無しさん:2009/11/26(木) 00:29:28
>>752
ありがとうございます。

> ていうかそもそもこれでいいのか? なんか需要違わね?
そもそもの課題はというと、indexに関する条件を簡単にブロックで渡して部分配列が戻ってくればいいんです。
問題がsortっぽいから紛らわしいですけど。

757 :デフォルトの名無しさん:2009/11/26(木) 00:34:01
データの参照先となる配列インスタンスを1つ持ち、
[], []=, each などを与えられたブロックを使って定義するような
Arrayのサブクラスを定義して、Array#mysliceでそれを返せば
いいのかなー。


758 :デフォルトの名無しさん:2009/11/26(木) 00:36:06
>>755
うぉっ!
おそるおそるゼロを消してみたり・・・。

ブロックがなんで後回しにできるのか理解できていません。
マニュアル読んでみます。

759 :デフォルトの名無しさん:2009/11/26(木) 00:38:10
>>757
仕様っぽい、
のがスラスラ出てくるのが
プロっぽい。

760 :デフォルトの名無しさん:2009/11/26(木) 01:04:15
改めて考えてみると、sliceじゃなくて
>>756
>>757
が欲しいものだった気がします。
引数を増やすというのは発想がC的ですよね。
ブロック指定のほうが柔軟性があってRubyっぽいと思います。

761 :744:2009/11/26(木) 01:38:08
あ、できた気がする。
a = a.select.with_index {|_,i| i%2==0} + a.select.with_index {|_,i| i%2==1}

762 :744:2009/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

######################
というわけで、若干ソートの方が遅いようです。
オーダーはどうなってるのか知りません。

763 :744:2009/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


764 :744:2009/11/26(木) 02:14:53
結論としては、
「slice 使えね〜」
っていう・・・orz

self[] との差が見いだせないんですけど・・・

765 :744:2009/11/26(木) 02:25:45
眠いのでここまでにします。
みなさまのアドバイスをすべて消化した結果です。
本当にありがとうございました。

このイディオムは部分配列、部分行列にかんしては威力を発揮すると思います。

766 :デフォルトの名無しさん: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"]

767 :デフォルトの名無しさん:2009/11/26(木) 03:08:56
sorted_words = words.sort_by{|a| a}.reverse

というかこの例ならこれでいい
sorted_words = words.sort{|a, b| b <=> a}


768 :デフォルトの名無しさん:2009/11/26(木) 03:17:30
>>767
d

769 :デフォルトの名無しさん:2009/11/26(木) 11:07:43
Ruby 1.9 And Rails 3.0
http://www.slideshare.net/arrrrcamp/ruby-19-and-rails-30

770 :デフォルトの名無しさん:2009/11/26(木) 11:17:57
>>769はマルチ

771 :デフォルトの名無しさん:2009/11/26(木) 11:23:29
はわわわわー

772 :デフォルトの名無しさん:2009/11/26(木) 12:18:25
RSSのURLのリスト与えて更新のあったもののリストを返すRSSチェッカーのサンプルってどっかにないですか?

773 :デフォルトの名無しさん:2009/11/26(木) 12:31:07
サンプ…ル…?

774 :デフォルトの名無しさん:2009/11/26(木) 12:36:35
思いっきりアプリケーションだな(w
適当なRSSチェッカーのソース読めばいいのではなかろうか

775 :デフォルトの名無しさん:2009/11/26(木) 12:45:13
RSSに特化してないが五月雨とか

776 :デフォルトの名無しさん:2009/11/26(木) 20:07:10
>>646
激しく遅レスだが、空 while なんて文法は Ruby にはない。

777 :デフォルトの名無しさん:2009/11/26(木) 20:25:17
>>776


778 :デフォルトの名無しさん: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"}

779 :デフォルトの名無しさん:2009/11/26(木) 20:38:39
>>777
??

780 :デフォルトの名無しさん:2009/11/26(木) 20:42:45
>>778
http://pc12.2ch.net/test/read.cgi/tech/1200175247/

781 :デフォルトの名無しさん:2009/11/26(木) 20:52:47
>>778
あまりに汚くて読んでないけど
ぱっとみエロい

782 :デフォルトの名無しさん:2009/11/26(木) 21:00:49
あぁん!

783 :デフォルトの名無しさん:2009/11/26(木) 21:14:18
うむ、該当課題に心当たりがある
宿題スレ向き

784 :デフォルトの名無しさん:2009/11/26(木) 21:41:59
>>781で意味わからなかったが
>>782分かってワロタ

785 :デフォルトの名無しさん:2009/11/26(木) 22:25:54
>>778
p Dir::entries("c:\hoge") でファイル名の配列を取得して、ファイルopenでOK?


786 :デフォルトの名無しさん:2009/11/27(金) 06:32:32
>>568
亀な上に便乗。自分は>>564じゃないけど
クラスを継承して作ったインスタンスが自身のメソッドで自身を書き換えるってヤバイの?

787 :デフォルトの名無しさん:2009/11/27(金) 08:54:07
>>786
self を別のオブジェクトに書き換えるのは変だし、そんなメソッドはそもそも Ruby にはない
通常そういう用途で望まれる動作は

   「aaa という変数名に = を使って目的の状態のオブジェクトを再代入する」

であるはず
ある変数が指し示しているオブジェクトが、再代入操作なしに別のオブジェクトに切り替わってたら大騒ぎ

788 :デフォルトの名無しさん:2009/11/27(金) 12:55:32
確かレシーバのクラスを変えてしまうメソッドが1つ無かったっけ?
まあ、どっちにしてもかなり例外的な事例だけど。

789 :デフォルトの名無しさん:2009/11/27(金) 13:14:40
Object#become のこと? (ないけど)


790 :デフォルトの名無しさん:2009/11/27(金) 13:15:55
File#reopenかな

791 :デフォルトの名無しさん:2009/11/27(金) 17:01:02

rails2.3.5


792 :786:2009/11/27(金) 18:41:22
>>787-790
レスありがとう
でも、標準クラスに自身を変更している(ように見える)メソッドがありますよね?
後ろに!が付くメソッドとかArray#clearとかってどういうどうなっているのかなと思いました

793 :デフォルトの名無しさん:2009/11/27(金) 18:49:45
>>792
あれはselfに別の何かを代入しているわけじゃないから。


794 :デフォルトの名無しさん:2009/11/27(金) 19:02:37
ブロックの instance_eval じゃない?

795 :デフォルトの名無しさん: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

後半へつづく

796 :デフォルトの名無しさん: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


797 :デフォルトの名無しさん:2009/11/27(金) 19:12:49
>>795
http://pc12.2ch.net/test/read.cgi/tech/1200175247/

798 :デフォルトの名無しさん: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


799 :デフォルトの名無しさん: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


800 :デフォルトの名無しさん:2009/11/27(金) 19:52:47
>>799
http://pc12.2ch.net/test/read.cgi/tech/1200175247/

801 :デフォルトの名無しさん:2009/11/27(金) 20:51:51
はやくパッチレベル上がらないかなあ

802 :デフォルトの名無しさん:2009/11/27(金) 22:43:48
これはリリースされる予定のものなんだろうかね。
ttp://twitter.com/shyouhei/status/6044003590

803 :デフォルトの名無しさん: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.

804 :デフォルトの名無しさん:2009/11/27(金) 23:05:41
>>803
w3mでも見られるよ。


805 :デフォルトの名無しさん:2009/11/28(土) 10:42:50
今まで気にしていなかったけど、C言語のインクリメント/デクリメントって使えないのな。

i = 0
i++

じゃなくて↓を使う:
i += 1

806 :デフォルトの名無しさん:2009/11/28(土) 10:54:55
うん、どうやって実装していいかわからんという理由でスルーされてる
見かけ同じで動作がちょっと似てるが細かい挙動はぜんぜん違う、みたいなのだったらないほうがましだし

807 :デフォルトの名無しさん:2009/11/28(土) 10:59:54
>>806
ML見てきたけど、実装が困難というのは技術的な問題じゃなくて、
変数がオブジェクトではないRubyで、どのようにして一貫性を持たせるか
という問題で実装されていない、と。

808 :デフォルトの名無しさん:2009/11/28(土) 11:01:28
attr_* や private の轍を踏むわけにはいかんからなw
名前同じである側面では他言語のと同じ動作だが実際の挙動は全然違って、
他言語のと同じつもりで使った人から非難轟々

809 :デフォルトの名無しさん:2009/11/28(土) 11:15:09
大半の要望は ++i と i++ の区別もついてないような人からだしな。


810 :デフォルトの名無しさん:2009/11/28(土) 11:15:22
ああ、あれはないわ

811 :デフォルトの名無しさん:2009/11/28(土) 11:18:30
C言語でライブラリを作ってRubyから使いたいのですが、どうすればできますか
ググレカスでもいいのでキーワードだけでも教えてください。


812 :デフォルトの名無しさん:2009/11/28(土) 11:25:08
ruby 拡張ライブラリ

813 :デフォルトの名無しさん:2009/11/28(土) 11:38:44
++i と i++ は結果的には一緒だろ
*++i と *i++ なら違うけど

814 :デフォルトの名無しさん:2009/11/28(土) 11:41:48
どうしてポインタになった

815 :デフォルトの名無しさん:2009/11/28(土) 11:52:43
>>813
結果的に?その結果…もとい、戻り値が違うだろ

816 :デフォルトの名無しさん:2009/11/28(土) 12:40:02
そうそう、>>813 みたいな連中。



817 :デフォルトの名無しさん:2009/11/28(土) 12:51:03
前置と後置の2種類ある時点で、なにか動作違うのかもとか立ち止まって欲しいよね

818 :デフォルトの名無しさん:2009/11/28(土) 12:58:52
初心者だと難しいと思うよ。
そもそも「単項演算子」という概念が無い時点で
i++ と ++i は同じものと考えてしまう人が多いように思う。

「えっ、1+3 も 3+1 も同じだよね?」

819 :デフォルトの名無しさん:2009/11/28(土) 13:08:10
あと、入門書とかでも前置/後置の違いの説明はするものの
使用例というか、実際的な問題でどのように使われるかという例示がないものが多いのが原因かな。

初心者だと
「え、何で二つあるの。どういう時に使うの。わかんねーから適当でいいや。」
でスルーしちゃう人が多いのよ。

820 :デフォルトの名無しさん:2009/11/28(土) 13:23:58
いやそのなんつーか、
「××言語の○○の機能が欲しいです」という意見があった場合、
その人が××言語の、最低限○○機能自体はよく理解してるというのは絶対的条件だと思うが

なんで「その人」に××言語の○○の機能の説明をこっちがしないといかんのよ

821 :デフォルトの名無しさん:2009/11/28(土) 14:07:51
前から思ってたんだが、
全治と河内があるのなら+i+があってもいいよね。

822 :デフォルトの名無しさん:2009/11/28(土) 17:04:39
配列を操作していると1,2時間停止するのはあり?

823 :デフォルトの名無しさん:2009/11/28(土) 17:09:40
処理の内容と環境次第

824 :デフォルトの名無しさん:2009/11/28(土) 17:22:43
うむ

次の質問の方どうぞ

825 :デフォルトの名無しさん:2009/11/28(土) 18:01:11
>>821

+ j +



826 :デフォルトの名無しさん:2009/11/28(土) 18:02:16
水橋演算子と命名

827 :デフォルトの名無しさん:2009/11/28(土) 18:24:39
google web apisをrubyで使用するプログラムがちょっと古い本に載ってて
web apisを書かれてあるURLへDLしに行ったんですがそのページはありませんでした。

今はもうweb apisは無くなってるんですか?

828 :デフォルトの名無しさん:2009/11/28(土) 18:38:55
>>827
Ajax APIで置き換えられたっぽい

829 :デフォルトの名無しさん:2009/11/28(土) 19:45:43
+    +
     j

830 :デフォルトの名無しさん:2009/11/29(日) 00:27:09
>>828
わが国のITはユーザに使用法を十分説明する時間がありません。
このため、初心者がベテランに疑問についてたずねる光景を目にすることがあります。
しかし本来は事故(情報漏えいなど)が発生した場合の責任は、
接続業者、サーバ運営者、システムを開発したエンジニアにあります。
メーカあるいは購入店にたずねるべきです。
利用者の仕事は自治(掲示板の秩序を守ること)です。助言を行ってはなりません。
素人が専門技術に言及するのは「親切」ではありません。「無責任」です。
海外のプロフェッショナルは、「私の仕事ではない」と答えるはずです。

831 :デフォルトの名無しさん:2009/11/29(日) 00:32:33
機械翻訳みたいな文章だなー

832 :デフォルトの名無しさん:2009/11/29(日) 15:12:23
ary[0,1,2]
ary[:last] = 4
こういうのないですか?(。・ω・)

833 :デフォルトの名無しさん:2009/11/29(日) 15:13:54
ary[-1] = 4

834 :デフォルトの名無しさん:2009/11/29(日) 15:14:45
>>832
ary[-1] = 4

じゃダメなの?



835 :デフォルトの名無しさん:2009/11/29(日) 15:31:54
>>832
ary[0,1,2]の意図が不明なので説明しる

836 :デフォルトの名無しさん: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: その他


837 :デフォルトの名無しさん:2009/11/29(日) 15:51:56
D': ary = [0, 1, 2]

そういえば [0, 2, 4, 8, 6] や [3, 6, 9, 12, 15] みたいな配列を作りたい場合どうするんだっけ

838 :デフォルトの名無しさん:2009/11/29(日) 16:02:15
Array.new(5) {|i| (i + 1) * 3 }

どうするっても色々あるが、とりあえず後者はこんなとこで
前者はなかなかの難問だな

839 :デフォルトの名無しさん: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]

こんな感じ

840 :デフォルトの名無しさん:2009/11/29(日) 16:12:01
>>838,839
サンクス
もしかしたら Array.new(start, stop, step) みたいに一発で書けるのがあるのかなーと思って

841 :デフォルトの名無しさん:2009/11/29(日) 16:16:22
>>832
これのことかなー

ary.push 4

842 :デフォルトの名無しさん:2009/11/29(日) 16:18:46
>>840
(0..8).step(2).to_a

1.8.6だとRange#stepにブロック必須だからきれいに書けなさそう


843 :デフォルトの名無しさん:2009/11/29(日) 16:20:51
>>840
irb> 0.step(8, 2).to_a
[0, 2, 4, 6, 8]

これも 1.8.6 では動作しないはず

844 :デフォルトの名無しさん:2009/11/29(日) 16:34:43
>>835
=ぬけてました。。
>>833-834
こんなことできたんですね!
ありがとうございます

845 :デフォルトの名無しさん:2009/11/29(日) 16:37:02
ary.values_at(0, 1, 2) というのもあったな。


846 :840:2009/11/29(日) 16:54:32
>>842,843
たびたびサンクス
でも正直なところ漏れのダメ脳にはフィットしませんですた

847 :デフォルトの名無しさん:2009/11/29(日) 20:26:11
dir = Dir.foreach(".") do |file|
(中略)
end

こういう式を、書籍で見たのですが、
Dir.foreach(".") do |file|
(中略)
end
なのは見慣れているのですが
dir =
ってどういう意味なんでしょうか。
単にdir変数に現フォルダのフォルダ名を
入れて、逐一file変数に放り込んでるだけですか?
意味が無いような。。

848 :デフォルトの名無しさん:2009/11/29(日) 20:29:53
Dir.foreach は nil を返すので、それ以降 dir を参照しているとしても
あまり意味ないね。

849 :デフォルトの名無しさん:2009/11/29(日) 20:35:26
うん、実行して確かめずに本を書いてる人は一定数いる

850 :デフォルトの名無しさん:2009/11/29(日) 20:43:49
Rubyは糞本が多い

851 :デフォルトの名無しさん:2009/11/29(日) 20:57:01
亀田戦のため…
と思ったのに
即答、ありがとうございます。
感謝

852 :デフォルトの名無しさん:2009/11/30(月) 03:58:59
Ruby1.8.6です。
小数の16進表示はRubyでは不可なのでしょうか?

valA=3.14
valB=valA.to_s(16)
とすると、ArgumentErrorになりました。


853 :デフォルトの名無しさん:2009/11/30(月) 06:05:11
どう表示されたら正解なんだい?

854 :デフォルトの名無しさん:2009/11/30(月) 10:52:47
>>852
Rubyでは、というからには他の言語ではできるの?>小数の16進表記
できるんなら 3.14
浮動小数点数のビット列の16進表現=小数の16進表記 という

855 :854:2009/11/30(月) 10:55:07
ミスったw

Rubyでは、というからには他の言語ではできるの?>小数の16進表記
できるんなら 3.14 はどう表記される?

浮動小数点数のビット列を16進で表示したもの=小数の16進表記 ということではないよね?

856 :デフォルトの名無しさん:2009/11/30(月) 11:15:03
変換ができる言語はちょっと検索しただけでは見つからなかったけど、
浮動小数点の定数の16進表記はC99ではできるね。

3.23d... になると思うけど。

857 :デフォルトの名無しさん:2009/11/30(月) 12:10:14
たとえば10進の 0.5 は (0.5).to_s(16)すると 0.8 になればいいのかな?


858 :デフォルトの名無しさん: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

859 :デフォルトの名無しさん:2009/11/30(月) 12:31:16
bcd ならめちゃ簡単なんだけどな
多分そういうことじゃないんだろうな

860 :デフォルトの名無しさん: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)

のようなのは正確に変換できるけど。


861 :デフォルトの名無しさん:2009/11/30(月) 12:59:09
もともと内部ビット列2進を10進表現したものだからあまり気にしても
しょーがない。


862 :852:2009/11/30(月) 16:57:52
>>853-861
レスどうも。
私がやりたいのは、ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113551061
のように小数を16進表示することです。

アルゴリズムでは>>858さんのようになると思いますが、てっきり
valA.to_s(16) のように1行で済むと思っていました。


863 :デフォルトの名無しさん:2009/11/30(月) 17:55:38
そういえば、Rubyの開発会議で誰かが16進浮動小数点数リテラルの導入について話してたことがあったなあ。

864 :デフォルトの名無しさん: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

865 :デフォルトの名無しさん:2009/11/30(月) 18:06:42
リスパダールという薬を飲むと、頭が冴えてきて
プログラムがうまくできるようになる

866 :デフォルトの名無しさん: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)

867 :デフォルトの名無しさん:2009/11/30(月) 22:19:18
やめないで

868 :デフォルトの名無しさん:2009/11/30(月) 23:48:58
1/0とか∞とかはどう表現するの?

869 :デフォルトの名無しさん:2009/11/30(月) 23:56:04
>>866ですが、循環小数になることがあるので、循環小数部分はカッコを付けて
3.2(3d70a)... という表現にした。

http://codepad.org/se0KjmXu

870 :デフォルトの名無しさん: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 とかがあるわけではない)
実際に適当な計算をして返り値を利用する

871 :デフォルトの名無しさん:2009/12/01(火) 00:25:26
16進数の小数点って初めて聞いた・・・
何に使われるんだろう?

872 :デフォルトの名無しさん:2009/12/01(火) 00:28:03
基本情報の試験にも普通に出るぞ

873 :デフォルトの名無しさん:2009/12/01(火) 00:29:54
…まあ、おおむね概念的なもんで、ふつーにプログラミングしてるぶんにはまずお目にかからない
これが必要になる分野なんて限られてるはず

が、自力で導き出せるのが好ましい

874 :デフォルトの名無しさん: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……

875 :デフォルトの名無しさん: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)



876 :デフォルトの名無しさん:2009/12/01(火) 00:51:04
なるほど。0.1は16進数では16^(-1)、2進数では2^(-1)になるわけか。
0.01はそれぞれ、16^(-2)、2^(-2)と……
小数点以下なんて考えたこともなかったぜ

877 :デフォルトの名無しさん: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)

よって ア

878 :デフォルトの名無しさん:2009/12/01(火) 01:17:18
なるほど分からん

879 :デフォルトの名無しさん: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))

880 :デフォルトの名無しさん: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))

881 :デフォルトの名無しさん:2009/12/01(火) 10:54:42
質問です。
s = "hoge"
p s.is_a?(String)
の結果がtrueになることが、納得できないのですが。
StringクラスのオブジェクトはStringクラスとis-aの関係なんでしょうか?

882 :デフォルトの名無しさん:2009/12/01(火) 10:57:31
a string is a string だぞ。当然じゃないか

883 :デフォルトの名無しさん:2009/12/01(火) 11:05:24
>>881
"hoge".kind_of?(String) が true だったら納得してもらえる?

884 :デフォルトの名無しさん:2009/12/01(火) 11:15:15
たぶん
class MyString < String ; end
MyString.is_a?(String)
がtrueになるべきとかが言いたいんだと思う

885 :デフォルトの名無しさん:2009/12/01(火) 11:22:33
instance_of? もあるからな…


886 :デフォルトの名無しさん: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? が主流になりつつある理由もこのへんが結構あるんではないかとか邪推

887 :デフォルトの名無しさん:2009/12/01(火) 12:33:52
Rubyのis_a?はそういうものだと覚えるしかないんじゃないか

888 :デフォルトの名無しさん:2009/12/01(火) 12:57:55
a dog is an animal
何かおかしなところある?

889 :デフォルトの名無しさん:2009/12/01(火) 13:02:10
Wikipediaに乗ってるようなis-a関係は
オブジェクト指向でクラスとクラスの継承関係を表すもの
Rubyではそうじゃないから違和感があるのはわかる

890 :デフォルトの名無しさん:2009/12/01(火) 13:03:21
クラスもオブジェクトであるというのが変なとこで弊害に

891 :デフォルトの名無しさん:2009/12/01(火) 15:31:35
>>871
πの計算

892 :デフォルトの名無しさん:2009/12/01(火) 15:37:28
>>889
Rubyでもそうじゃないの?
3.14.is_a?(Float), (Numeric), (Object) ぜんぶtrueになるけど。

893 :デフォルトの名無しさん:2009/12/01(火) 16:25:02
一般的なオブジェクト指向解説書での「is a関係」がクラス間の関係を表すからおかしいんだよな。
Nobita is a Strudent. はいいけど Student is a Person. はおかしいもん。
「is a関係」がインスタンス-クラス間の関係を表すように定義してほしかった。


894 :デフォルトの名無しさん:2009/12/01(火) 17:07:26
is-aの関係であるなら、それはRubyでは継承で表されるべき
ただし、継承がis-aでなければならないという意味ではない

895 :デフォルトの名無しさん:2009/12/01(火) 17:27:01
>>893
一般的なオブジェクト指向の概説上は、インスタンスの存在はわりとどーでもいいんで…

896 :デフォルトの名無しさん:2009/12/01(火) 17:28:03
結局は>>887でFAなのがなんとも…

897 :デフォルトの名無しさん:2009/12/02(水) 02:17:00
1.8.xの変数と定数についてですが、たとえば
foo = Array.new
FOO = Array.new
でインスタンスfoo及びFOOの挙動に違いはないという認識であっていますか?
どちらもArrayの中身を自由に書き換えられるようですが・・・

898 :デフォルトの名無しさん:2009/12/02(水) 02:41:54
>897
中身は自由に書き換えることができる。
参照先を変えることができないのが定数。
例えば、その後にもう一度FOO = Array.newとかしようとすると怒られる。

899 :デフォルトの名無しさん:2009/12/02(水) 07:09:07
>>897
再代入によってオブジェクトIDを切り替えると警告される
それだけ

900 :デフォルトの名無しさん:2009/12/02(水) 10:55:23
irb> a = Array.new
irb> CONST = a
irb> CONST = a
(irb):3: warning: already initialized constant CONST

うそつきいいいい

901 :デフォルトの名無しさん:2009/12/02(水) 11:33:57
>>900
誰に対して言っているんだ、それは?

ちゃんと警告は出てるぞ。だから問題無いじゃないか。

902 :デフォルトの名無しさん:2009/12/02(水) 11:39:52
定数への再代入という行為自体がダメなんだろ
代入されようとしているオブジェクトのID云々は関係ない

903 :デフォルトの名無しさん:2009/12/02(水) 12:55:09
ようはRubyの定数はtype * const(type const *でない)

904 :デフォルトの名無しさん:2009/12/02(水) 12:57:17
>>900 は何を主張しているの?


905 :デフォルトの名無しさん:2009/12/02(水) 12:59:48
>>901 = >>904

906 :デフォルトの名無しさん:2009/12/02(水) 13:04:22
初心者スレだから放っておいてもいいんだが

2chのレスは基本、直前へのリアクションだ
それを踏まえると>>900
「同一オブジェクトを再代入したけど警告出るじゃん
オブジェクトIDを切り替えるのが警告の条件のひとつだなんて>>899うそつきいいいい」
となる

907 :デフォルトの名無しさん:2009/12/02(水) 13:19:12
irb> CONST = Array.new
irb> CONST = Array.new
でなかった理由に思い至るかどうかとかそんな話

908 :デフォルトの名無しさん:2009/12/02(水) 19:54:24
ルビー厨キモ過ぎ

909 :デフォルトの名無しさん:2009/12/02(水) 19:58:21
そろそろNGワードだな。

910 :デフォルトの名無しさん:2009/12/02(水) 20:24:59
勝手にNGにしろよクズ

911 :デフォルトの名無しさん:2009/12/02(水) 22:02:30
activerecordで新しいデータをsaveしたあとそのデータのidって検索しないでわかる?

912 :デフォルトの名無しさん: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は貰えていると思う。


913 :デフォルトの名無しさん:2009/12/03(木) 00:00:58
idとれてました
ありがとうございました

914 :デフォルトの名無しさん:2009/12/03(木) 00:09:32
一度requireして使用したライブラリを削除することはできますか?

トップレベルじゃなく、特定の名前空間や関数の中でrequireしたような場合でも
スコープが限定されないようなので、
あるいは限定的なスコープに読み込むような手法でもよいのですが・・・

module Foo
 require 'bar'
end
b = Bar.new #=>ここで使用できないように限定したい

915 :デフォルトの名無しさん:2009/12/03(木) 00:15:51
>>914
できません

というかその使い方は変だ

916 :914:2009/12/03(木) 00:18:53
>>915
ありがとうございます

917 :デフォルトの名無しさん:2009/12/03(木) 00:45:37
>>914
ライブラリというかrequire等で定義されたクラスを削除する事は
remove_constで出来るけど、求めてるものとは違うんだろうな

918 :デフォルトの名無しさん:2009/12/03(木) 01:10:44
どういうケースなのか知らないからこれが解決になっているかは知らないが、
そういうのは別のファイルでmoduleで定義して、
使用するクラスでincludeするというモデルが素直なモデルだけどね

919 :914:2009/12/03(木) 01:13:52
>>917
ありがとうございます。確認できました。そういう意味でした。
こちらの説明がよくなかったですm(_ _)m

920 :デフォルトの名無しさん:2009/12/03(木) 03:28:10
rsenseというのを知ったんですけど、これってどうやれば動きますか?

921 :デフォルトの名無しさん:2009/12/03(木) 08:03:55
remove_constなんて「使っちゃ駄目」だろう

922 :デフォルトの名無しさん:2009/12/03(木) 08:37:32
使っちゃだめとまでは言わないけど、使っていいレベルの人なら自力で見つけられるはず。


923 :デフォルトの名無しさん:2009/12/03(木) 08:48:14
いや remove_const を使っちゃ駄目だろ
module で囲まれてる外と中で同じ表記の Bar.new をしたいが、Bar が指すクラスは別にしたいってことだろ、これ

924 :デフォルトの名無しさん:2009/12/03(木) 08:57:13
remove_constの正しい使い方はライブラリの再読込
バグがあってもプログラムを停止させずにクラスを作り直せる

925 :デフォルトの名無しさん:2009/12/03(木) 09:01:26
あー、>>921>>932は、*この文脈*では使っちゃだめと言ってるのか。


926 :925:2009/12/03(木) 09:02:39
レス番手打ちしちゃいかんなー。>>921>>923の間違いですもちろん。


927 :デフォルトの名無しさん: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)

928 :デフォルトの名無しさん:2009/12/03(木) 15:30:16
"abcbc".nantoka(/bc/) # => [1, 3]
のような正規表現にマッチしたインデックスの配列を返すメソッドって?
indexを複数やる感じ

929 :デフォルトの名無しさん:2009/12/03(木) 15:43:20
"abcbc".scan(/bc/){p [$~.begin(0), $~.end(0), $~.offset(0)]}
[1, 3, [1, 3]]
[3, 5, [3, 5]]

930 :929:2009/12/03(木) 15:50:57
ごめんなさい。求めているのと違うこと書いた。

require "enumerator"
"abcbc".enum_for(:scan, /bc/).map{$~.begin(0)} #=> [1,3]

931 :デフォルトの名無しさん: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 で入れました)

932 :931:2009/12/03(木) 19:35:00
また、gem install rails時に
gem search railsすると、ちゃんと rails 2.3.5が入っているとでます。

933 :デフォルトの名無しさん:2009/12/03(木) 19:39:23
>>931
> gem uninstall --install-dir ~/.gem/ruby/1.8 rails
それがユーザー権限インストールされたgemの正しいアンインストール方法です

934 :デフォルトの名無しさん:2009/12/03(木) 21:08:19
rm -rf ~/.gem

935 :デフォルトの名無しさん:2009/12/03(木) 21:13:16
>>927
ないです

936 :931:2009/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
あれそうなの?(´・ω・`)

937 :デフォルトの名無しさん:2009/12/04(金) 00:55:52
p [1,"",nil].compact
これでnilは消えるんですが
""を消す関数ってありませんか?

938 :デフォルトの名無しさん:2009/12/04(金) 01:26:22
rejectとかdelete_ifとか

939 :デフォルトの名無しさん: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]

うん、長いんだ
適当なメソッド名で掃き出すのをおすすめ

940 :デフォルトの名無しさん:2009/12/04(金) 06:38:15
p [1, "", nil].reject{|i|i==""}

非破壊的ならこっちで
reject(val)って何でないんだろう

941 :デフォルトの名無しさん:2009/12/04(金) 09:45:08
メソッド書くときって

  sayHello
  say_hello

のどちらで書くのがスタンダードですか


942 :デフォルトの名無しさん:2009/12/04(金) 09:56:36
前者は不可

943 :デフォルトの名無しさん:2009/12/04(金) 09:57:26
不可は SayHello だろ

944 :941:2009/12/04(金) 10:11:32
http://www.loveruby.net/w/RubyCodingStyle.html

say_hello

の方が多いみたいですね。
sayHelloで書けと言われたのですが.....


945 :デフォルトの名無しさん:2009/12/04(金) 10:14:13
>>941
後者がスタンダードです

メソッド名やインスタンス変数はlower_name
定数名はUPPER_NAME
モジュール名、クラス名はCamlCase
というのがRubyの原則

例外はクラス名=メソッド名であるような場合
つまり、Regexp()やURI()のようなメソッドぐらいしか思いつかない

946 :デフォルトの名無しさん:2009/12/04(金) 10:18:22
>>944
会社(授業)の方針や規約で従うしかない、というのであればやむを得ない

でも、そうでないなら極力lower_nameにするべき
9割のライブラリは標準に従ってるし

947 :941:2009/12/04(金) 10:22:39
C++で sayHello スタイルで書かれたライブラリを
Rubyに移植しろと言われたのですが、さてどうしたものか....


948 :デフォルトの名無しさん:2009/12/04(金) 10:25:06
sayHelloで書けと言われたならそうするしかないし
そうでないならRubyに合わせたほうがいい
そんだけでしょ

949 :デフォルトの名無しさん:2009/12/04(金) 10:32:17
>>947
状況によるんじゃね?
sayHelloでないと問題が起きそうだと思うなら、素直にsayHelloで
そうでなければ「Rubyではsay_helloの方が一般的なんです!」と主張

950 :デフォルトの名無しさん:2009/12/04(金) 10:35:43
>>947
そう書けと言われたならそう書くべき
それが嫌ならルールに物申すだけ

alias say_hello sayHello

というのをクラス内で自動生成させるという手もあるけど、
実際にメソッドが増えるから本質的な解決法にはならない
「Rubyで作ってRubyからアクセスするものなのにC++の流儀をわざわざ引き継ぐ理由は何ですか?」
というような質問をして、それでも曲がらなければそりゃ従うべき

951 :デフォルトの名無しさん:2009/12/04(金) 10:38:45
Rubyスタイルはもはや骨董品だし堅守すべきものでもないよ

952 :デフォルトの名無しさん:2009/12/04(金) 10:40:53
>>951
Rubyスタイルってなんですか?

953 :デフォルトの名無しさん:2009/12/04(金) 11:09:21
snake_case という言葉を知らないんだろうな

ぜんぜん一般的じゃないから知らない人のほうが多いが
俺も CamelCase なんかとの比較列挙のときしか使わん
「アンダースコア区切り」で一発で伝わるし

954 :デフォルトの名無しさん:2009/12/04(金) 11:10:30
ライブラリの単純なラッパー作るときはsayHelloのままにして、Rubyっぽいライブラリにする時にsay_hello

955 :デフォルトの名無しさん:2009/12/04(金) 12:15:25
>>939
ちょっと短いソースに挑戦してるとこだったので関数の形がよかったんです
ないのは残念
[゙゙,1] - [゙゙]これで我慢しときます

956 :デフォルトの名無しさん:2009/12/04(金) 13:20:36
snake_caseってハンガリアン記法のことじゃないの?

957 :デフォルトの名無しさん:2009/12/04(金) 13:24:29
いや全然

958 :デフォルトの名無しさん:2009/12/04(金) 13:30:37
ハンガリアン記法はハンガリアン記法でいいじゃないか
名前あるんだし

959 :デフォルトの名無しさん: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

960 :デフォルトの名無しさん:2009/12/04(金) 18:17:52
endが目立つなあ

961 :デフォルトの名無しさん:2009/12/04(金) 18:26:17
無理っぽいですね
replaceによる書き換えしか手段がないかも

962 :デフォルトの名無しさん:2009/12/04(金) 19:41:37
String文字列をRegexpにする関数ってないですか?

963 :sage:2009/12/04(金) 19:52:06
[1,2,3,4,5].inject(0) {|result, item| p result += item; result } こう?

964 :デフォルトの名無しさん:2009/12/04(金) 19:59:13
>>962
リテラルではなくてRegexpのコンストラクタ使うといいよ

965 :デフォルトの名無しさん:2009/12/04(金) 20:02:22
compile

966 :デフォルトの名無しさん:2009/12/04(金) 20:07:03
str = "hoge"
Regexp.new(str)
Regexp.compile(str)
/#{str}/


967 :デフォルトの名無しさん:2009/12/04(金) 20:07:28
Stringで与えられた正規表現をRegexpオブジェクトにするなら
Regexp.new(str)か/#{str}/
Regexp.compile(str)はnewの別名だから好みで

メタ文字がエスケープされていない「正規表現ではない」文字列を
RegexpオブジェクトにしたいならRegexp.escape(str)

968 :デフォルトの名無しさん:2009/12/04(金) 20:10:10
俺はRegexp.quoteのほうをよく使うな

969 :デフォルトの名無しさん:2009/12/04(金) 20:23:36
>>967
ありがとうございます
Regexp.new使います

970 :デフォルトの名無しさん:2009/12/04(金) 20:26:25
escape はエスケープするだけで、返されるのは String 。
Regexp オブジェクトにするにはそれをさらに Regexp.new なりなんなりしないと。

971 :デフォルトの名無しさん:2009/12/04(金) 20:27:37
>>963
injectは戻り値を置いておかなきゃいけないのが嫌なので作ろうとしてました
やっぱ引数には配列か構造体か関数でも渡さないとダメかなぁと

972 :デフォルトの名無しさん:2009/12/04(金) 20:36:56
>>970
そうだったthx

973 :デフォルトの名無しさん:2009/12/04(金) 21:14:28
injectはtapとの共用オススメ

(1..10).inject({}) { |r, x| r.tap { |e| e[x] = x ** 2 } }

え、面倒くさい?ですよねー

974 :デフォルトの名無しさん:2009/12/04(金) 22:10:00
質問です。
引数として受け取ったブロックを使って自身の特異メソッドを定義するメソッド、は
どのように書いたらよいでしょうか?

def define_singleton_method(sym, block)
class <<self
define_method(sym, block)
end
end

だと、スコープの関係で sym や block が見えなくなるし
文字列にして eval に渡すという方法だと block が渡せなくて困っています。

975 :デフォルトの名無しさん:2009/12/04(金) 22:13:31
>>971
合計だけなら、[1,2,3,4].inject(:+) でいいけど、ちょっと処理を作り込む時に悩むよなあ。

976 :デフォルトの名無しさん: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


977 :974:2009/12/04(金) 22:31:24
>>976
おお、ありがとうございます!
そういう self の取得方法があるとは、全然気付きませんでした。

そっか、class...end も式で、最後に評価した値を返すんでしたね。
助かりましたっす。


978 :デフォルトの名無しさん:2009/12/04(金) 22:32:34
p Array.new(5) {|i| i } # => [0, 1, 2, 3, 4]

この0とか1はどこから出てくるのでしょうか?
iってnilじゃないの?

979 :デフォルトの名無しさん:2009/12/04(金) 22:35:34
インデックス(添え字)だよ。

980 :デフォルトの名無しさん:2009/12/04(金) 22:41:36
Array.new(size) {|index| ... }
って、|i|にはindexが入る「決まり」なのか。

981 :デフォルトの名無しさん:2009/12/04(金) 22:43:25
各要素のインデックスを引数にしてブロックを実行。
その評価結果を対応するインデックスの値とする。

p Array(5) {|i| i ** i}
=> [1, 1, 4, 27, 256]

982 :デフォルトの名無しさん: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 }

983 :デフォルトの名無しさん:2009/12/04(金) 23:52:46
「ゆっす」って何

984 :デフォルトの名無しさん:2009/12/05(土) 00:22:29
ンデュールじゃね

985 :デフォルトの名無しさん:2009/12/05(土) 03:18:49
gem install hogehoge



ERROR: While executing gem ... (Gem::RemoteSourceException)
  HTTP Response 403

になるの俺だけ?
ぐぐっても「どうにもならんから新しいgemを手動でインストールした」
って感じのBlogがあっただけだったけど

>>682は解決したの?

986 :デフォルトの名無しさん:2009/12/05(土) 07:58:23
>>985
しばらくしたらたまに落ちます

987 :デフォルトの名無しさん:2009/12/05(土) 09:11:07
>>985
そういうのを書くときは gem -v と gem env の結果を書け。
たぶんおそらくきっと gem のバージョンが古いだけ。


988 :デフォルトの名無しさん:2009/12/05(土) 09:28:10
gemのリモートソースのurlって変わった?

989 :デフォルトの名無しさん:2009/12/05(土) 11:09:40
h = {"a" => 1, "b" => 2, "c" => 3}
p h

は問題ないのですが、

p {"a" => 1, "b" => 2, "c" => 3}

がsyntax errorになるのは何故でしょうか?

990 :デフォルトの名無しさん:2009/12/05(土) 11:32:17
ブロックの始まりの { と勘違いしてるとかじゃまいか

irb(main):010:0> p{|e|'a'}
=> nil

マニュアルにはなぜこうなるかは書かれていない悪寒

991 :デフォルトの名無しさん: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})

と引数カッコを明示するしかないな

992 :デフォルトの名無しさん:2009/12/05(土) 11:38:50
あ、書いてあった。Ruby用語集より

> ブロック付きメソッド呼び出し
> コードの集まり(ブロック)を受け取ることのできるメソッドをブロック付きメソッド呼び出しと呼ぶ。
>
> ブロック付きメソッドの中ではyieldを使ってブロックを実行することができる。
> 当然のことながら、与えられたブロックをどのように処理するかはメソッド側に委ねられている。
> ので、***内部でブロックを評価しないメソッドにブロックを与えてもなにも起きない。エラーも起きない。***

993 :デフォルトの名無しさん:2009/12/05(土) 11:57:52
なるほどね良く気がつくなあ
質問者じゃないが納得した

省略可能なことが多すぎて優先順位とか知りきれてないことが多いなあ
実は優先順位が関わるあいまいな表現になってても
記述者(自分)としてはあいまいにしてるつもりはないから余計に混乱するw

994 :デフォルトの名無しさん:2009/12/05(土) 13:00:32
>>991
こういうのはRubyのよくないところだと思うな。
なんとかして欲しい。

995 :デフォルトの名無しさん:2009/12/05(土) 13:07:11
gems.rubyforge.orgじゃなくてgemcutterに変えればいいのか
なんでこんな重要なことなのに知ってる奴いないんだ

996 :デフォルトの名無しさん: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

997 :デフォルトの名無しさん:2009/12/05(土) 14:08:30
gemcutterくらい入れとけよw

まあ、たしかにgithubのgemサポート外されたから、
今度からgemcutterがメインになるだろうことはなんらかのなんらかがあってもいいな。周知させとかないと

998 :デフォルトの名無しさん:2009/12/05(土) 14:11:41
>>994
いや現状のこれが「なんとかした」結果だから
ハッシュリテラルの優先度は高くしないほうがいい
そもそものあれとしてメソッドに引数カッコなしで { } 記述のハッシュリテラルを渡すということ自体が稀

999 :デフォルトの名無しさん:2009/12/05(土) 14:16:08
>>989
中カッコを外すとかは?

p "a" => 1, "b" => 2, "c" => 3

1000 :デフォルトの名無しさん:2009/12/05(土) 14:28:51
あ、1000もらいますね。

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

255 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)