[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 21:32 / Filesize : 199 KB / Number-of Response : 759
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 31



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

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

47 名前: mailto:sage [2009/09/17(木) 19:29:16 ]
>>46
わかりました

gvimは敷居が高いですか・・・
ttp://skitch.com/soh335/bi14a/quickrun-ruby-vim
こんな感じでやりたかったのです
ただかっこいい
それだけです


48 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:39:11 ]
>>47
これはMacのターミナルではないか?
ターミナルは半透明に出来るのでデスクトップピクチャ(壁紙)の猫が
透けて見えている。


49 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:45:19 ]
>>47
初心者がWindowsで使うなら、エディタとしては秀丸やxyzzyでいいんじゃないかな。
これなら初心者でも使えるし、習熟するにつれて強力にカスタマイズもできるし。

gvimはほんとのプロフェッショナル向け。プロが作業を極めるための道具であって、初心者が手を出す代物ではない。

50 名前: mailto:sage [2009/09/17(木) 19:45:44 ]
>>48
そこはどうでもいいのですがこんなかっこいい画面でプログラムを作りたいのです


51 名前: mailto:sage [2009/09/17(木) 19:48:37 ]
>>49
xyzzyもいいですね!
これなら初心者も使えるとのことなのでこれでお願いします
インストールから環境設定までおしえてください
よろしくお願いします

52 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:49:33 ]
カエレ

53 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:51:08 ]
>>49
xyzzyも自分でなんとかする人じゃないと相当難儀だぞw

54 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:53:29 ]
やはり教えてばかりでは嫌われますね
こちらはいたって真剣なのですが

55 名前: mailto:sage [2009/09/17(木) 19:54:10 ]
>>54はボクのレスです



56 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 19:58:39 ]
>>49
xyzzy駄目だろ
まさかvim使えないような奴に最初からgates.l入れさせる気か
着色と自動インデントさえされればなんでもいいはずだ

57 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:02:40 ]
>>54
自分のスレを読み返してごらんよ
Ruby よりエディタへの言及の方が多いよ

58 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:10:31 ]
hello world はgvimで書いたのか?

59 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:11:36 ]
この人に必要なのは、いろんなエディタをインストールして
ひととおり色設定をいじって遊んでみることだと思う。


60 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:12:14 ]
gvimの話はよそでやってくれ、とりあえず。
というか、vimをNGワードにするのが適切だな、こりゃ。

61 名前: mailto:sage [2009/09/17(木) 20:12:56 ]
>>58メモ帳です

62 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 20:45:34 ]
エディタのことは忘れて、まずは>>36のチュートリアルをやろうぜ。
エディタを語るにはきみはまだ若い。

63 名前: mailto:sage [2009/09/17(木) 21:00:39 ]
>>62
わかりました
質問があります
hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
いちいち保存先までcd \とか入力していかないとエラーが出るので面倒です・・・
どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?

今まで検索していたのですがnotepad++というエディタがありました
画面の色とか文字の色とか適当にいじって変えてます
gvimやxyzyyはまだまだ先のような気がします
かなり上級者向けのようです
でもやはり形だけでもいいのでgvimやxyzyyでやりたいですねえ・・・

64 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:03:13 ]
>>63
> どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
Ruby関係ないのでコマンドプロンプトの使い方勉強しろ
ディレクトリ移動関連の最低限必要なことは10分もあれば終わる

65 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:16:20 ]
昔話は嫌われるのだが、
UNIXからMSに移植されたツールは、とても多い。
sed,grep,awkとかね。
今でも、とても役に立ちますね。

MS-DOSの始めの頃に、**とか言う名前のフルスクリーンエディターが発売されました。
MS-DOSの環境であれば、同じようにちゃんと動く、ってのが売りです。
(このあたりが?の人は考古学者になったつもりで調査すべし)
結局、これは商業的な成功はなかったみたいですね。
INT21のせいだと思うのですが、とても遅かったのですよ、表示が。

ん、眠くなったので、続く



66 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:21:17 ]
スレ違い。初心者スレですので無用な語りはお避けください。

67 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:33:14 ]
>>63
>質問があります
>hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
>いちいち保存先までcd ¥とか入力していかないとエラーが出るので面倒です・・・
>どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?

質問の意味がわからない。どんなエラーがでるの?

68 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 21:38:36 ]
>>67
いやそれはそのまんまだろ
コマンドプロンプトの起動時のカレントディレクトリと自作ファイルを置くディレクトリが違うんだ
例はたいていカレントにあるスクリプトを起動しているから、それと同じようにするにはどうしたらいいかという話

つまりはディレクトリの概念と操作の勉強が要る

69 名前: mailto:sage [2009/09/17(木) 21:42:57 ]
>>68
コマンドプロンプトを開いたときは常に自作ファイルをおいているディレクトリから
はじめることはできませんか?
今の環境だといちいち自作ファイルをおいてあるディレクトリまでcdコマンドで移動しないと実行できません

>>68
ruby: No such file or directory -- hello.rb (LoadError)

70 名前: mailto:sage [2009/09/17(木) 21:47:06 ]
Cドライブの下にsrcというフォルダを作成してここに自作ファイルを保存しています
コマンドプロンプトから自作ファイルを実行するときは
ruby ○○○.rb 実行とするだけで動くようにはできませんか?
今の環境でこれをすると
ruby: No such file or directory -- hello.rb (LoadError)
と表示されてしまいます
ruby c:\src\hello.rb 実行とすれば動いてくれるのですが

71 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 22:09:11 ]
はやくパッチレベル上がらんかな
mingw使いはバイナリを上げられんではないか

72 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 22:27:10 ]
p0がどんどん広まるよー

73 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 22:27:36 ]
>>69
そういうことはできるのかな。わかんない。

移動がめんどくさいというだけなら、最初から「C:¥」を指定してコマンドプロンプトを起動するのはどうだろうか。

(1) C:¥Documents and Settings¥ユーザ名¥スタートメニュー¥プログラム¥アクセサリ をエクスプローラで開く
(2) 「コマンドプロンプト」ショートカットをデスクトップにコピー
(3) コピーしたショートカットを右クリックして「プロパティ」を選ぶ
(4) 「ショートカット」タブの「作業フォルダ」を「C:¥src」に指定して、OKボタンを押す
(5) コピーしたショートカットをダブルクリックすると、「C:¥src」に移動していることがわかる

>>68
おまえかしこいな。おれはさっぱりわからんかった。



74 名前:9 mailto:sage [2009/09/17(木) 22:50:25 ]
>>73ありがとうございます!
らくになりました!


75 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 04:52:49 ]
>>33
NetBeansオススメだぜ。

俺はRubyでちょっとした使い捨てプログラム書くときはxyzzyのruby-mode、
仕事のプロジェクトはNetBeansと使い分けてる。

>>69
"Command prompt from here"いれろ。ぐぐったらでてくる。
エクスプローラーからフォルダの右クリックで、そのフォルダを作業フォルダにしてコマンドプロンプトを開けるようになる。



76 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 11:27:41 ]
>>75
すでに解決しております
ありがとうございます
またお願いします

77 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 11:39:09 ]
>>9です
質問することが多いと思いますので名前をつけさせていただきました
よろしくお願いします


78 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:12:53 ]
>>77
コテつけてくれるのはありがたい。



さ、NGにしよっと。

79 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:19:14 ]
無駄にスレをのばさないでください。>>見習い
S/Nが低下し過ぎ。

これがつづくと、だれもこのスレをみなくなって
質問しても答えてくれる人がいなくなってしまう。

80 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:20:16 ]
>>77
まあ気長に頑張れ
>>2 は見たか。多少値がはっても入門書ぐらいはちゃんとしたのを
買った読んで方がいいぞ

81 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 12:23:09 ]
>>78さんw

>>79
気をつけます
すいません
S/Nってなんですか?

>>80
ありがとうございます
入門書は買うつもりです
PCだと目が疲れてくるのでやっぱりじっくり見てやるなら紙のほうがいいです


82 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:25:50 ]
君はググることすらしないのになんでここにいるん

83 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 12:34:55 ]
>>82
ググってますよ

84 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:38:37 ]
>>79
どうして存在を認めて名前で呼ぶの

85 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 12:55:44 ]
初心者スレだから、いいんじゃね。
むしろ、初心者がどこで躓くのかを俺は知りたい。





86 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:01:55 ]
>>85
それを知りたいならこの板全部読め
全部載っている

87 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:04:19 ]
>>83
S/Nでぐぐった?
人に聞く前に自分で調べようって話

88 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 13:08:30 ]
>>87
ぐぐりましたけどどれも関係なさそうなものばかりですよ


89 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:31:00 ]
rubyで再起処理をしようとすると、undefined method `each' for nil:NilClassと出ますが、再帰処理はできないのですか?

90 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:33:00 ]
>>88
いい加減なことを言うなよ
検索結果の最上位にずらっと並んでいるだろ……

というか、こういう Ruby とは何の関係もないやり取りがまさに N なわけだよ

91 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:35:52 ]
>>89

各オブジェクトがeachを持っているかどうかの判断をする必要があるんじゃないの?


92 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:36:55 ]
>>89
それは書き方間違ってるだけです
エラーの理由がそのまんまです
[1,2,3].each do |e| … と直接書いた場合は [1,2,3] をeach 内から読む手段がないんで
再帰したい場合はご面倒でも arr = [1,2,3] と変数として一度定義してから arr[1..-1] とか呼んでください

93 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:37:14 ]
>>89
意図せず nil に対して each を呼んでいる
コードを張れ

94 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:39:53 ]
>>91

オブジェクトにeachを持ってるか判断がいるのですか?
ちなみに下記コードで出ました
def treeRecur(activeCell,tree,hier,refCellName)

hier+=1

refCellName[activeCell].each{|activeRefCell|

tree << [activeCell , hier , activeRefCell]

treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end

activeCellはString
treeは配列
hierは数値
refCellNameハッシュになってます。
それで:87:in `treeRecur'となってるのでtreeRecurが再帰できないのかと思ったのですが

95 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:49:58 ]
>>94
よくわからないけど停止条件が見当たらないよ



96 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:50:01 ]
原因がわかりました。

再帰したときにrefCellNameがnilになっています
(最初に呼び出された時は正しいデータが入ってました)

再帰したらrefCellNameのデータってnilになるものなんでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:51:29 ]
>>95
停止はrefCellName[activeCell]の中が空になったときです

98 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:53:34 ]
>>97
> 停止はrefCellName[activeCell]の中が空になったとき

refCellName[activeCell] が空になったら再帰から抜ける、という部分の
コードが見当たりませんが?

それと、空になるとはどうことだと理解してますか?


99 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:54:14 ]
each の中で再帰するなめんどくさいから
あと LCC は氏ね

空のハッシュに特定のキーを指定した場合の返り値は nil だ
とりあえず停止条件は明記しろ

def treeRecur(activeCell,tree,hier,refCellName)

hier+=1

refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell|

tree << [activeCell , hier , activeRefCell]

treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end

100 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 13:59:21 ]
>>96
いやそれであのエラーは出ない
nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass

each のレシーバが nil だっていうエラーだから
refCellName[activeCell] が nil のはず

どうしてそれが nil になるのかはよくわからん
refCellName から要素を削除する仕掛けが停止条件兼ねてどっかにあって
それと干渉してるんじゃないの?

101 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:00:19 ]
>>98-99
わかりました。

eachはnilはエラーを返すのですか

def treeRecur(activeCell,tree,hier,refCellName)

hier+=1
if refCellName[activeCell] == nil
return
end
refCellName[activeCell] && refCellName[activeCell].each{|activeRefCell|

tree << [activeCell , hier , activeRefCell]

treeRecur(activeRefCell , tree , hier , refCellName) ##再帰的に呼び出し
}
hier-=1
end

こうしたら動きました。2日前までperl中でして,perlはこれでも動くからできるかと思ってました。

102 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:04:24 ]
うん、再帰使ってるプログラムは
停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる

103 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:05:54 ]
>>101
「NilClass に each メソッドが定義されていない」と認識するべき
レシーバが nil だからではない

nil.to_s は NilClass#to_s が定義されているからエラーは出ない
空文字列を返す

104 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 14:08:36 ]
>>103
なるほど

納得しました。クラスごとに定義が必要でnilにはなかったと
ありがとうございました


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

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

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



106 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:30:37 ]
◆YG1xRh8M6Ffb乙

107 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 16:40:08 ]
>>105
「Rubyに関する」既出な質問やわけわかな質問なら、いくらでも大目に見る
スレ違いな質問(S/Nとか)はよそに行け

加えて言うと、調べる気がなさそうな人間に対しては
いくらマゾヒストでも親切でも教える気になれんよ
人力検索サイトに行け

108 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 16:52:14 ]
ルビーのショートカットアイコンを変更したいのですが
右クリックしてプロパティから変更しようとしても”アイコンの変更”ボタンが
アクティブ?の状態になっておらず変更できません
どうすればいいですか?
よろしくお願いします

>>106
ちがいますw

109 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 17:33:05 ]
>>107
>加えて言うと、調べる気がなさそうな人間に対しては
>いくらマゾヒストでも親切でも教える気になれんよ

回答したいやつが回答すればいい。
回答したくないやつは黙って無視しとけばいい。
ここはもともとそういう場所。
調べる気がなさそうな人間がいれば、キーワードを教えてぐぐることを薦めるだけのこと。
その程度でカリカリするなら、こんなスレ見ない方がいいよ。ストレスたまるだけだから。

110 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 17:33:55 ]
>>108
Windows関連のスレで聞いたほうがいいかも。

111 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 18:02:45 ]
>>110
ありがとうございます
windows板の質問スレッドで回答待ちです


112 名前:デムパゆんゆん [2009/09/18(金) 18:11:39 ]
おう、がむばれ!

113 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:16:05 ]
スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
でも作業フォルダにはこれと同じファイルがありません
意味がわからないのですが・・・
どういうことですか?


114 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:19:55 ]
>>113
ruby本体だって作業フォルダにないだろ。それと同じだよ
環境変数PATH、コマンドプロンプトとかでググってみたら

115 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:21:22 ]
恐らくボクの言っていることが通じてないとおもいます
ボクの説明が悪いです
すいませんね



116 名前:デムパゆんゆん [2009/09/18(金) 19:28:29 ]
どうせならLinuxでやろうぜ。

117 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:32:36 ]
もっていません

118 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:34:49 ]
>>115
通じてないと思うのならあやまる前に通じさせる努力をしてくれよw
何がわからなくて何を知りたいのか、回答者が推測しなければならないような
質問はよくない、というかかなり損してるよ

119 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 19:36:36 ]
>>29さんはいませんか?
いらっしゃいましたら方法をおしえてください


120 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:01:57 ]
>>118
こんな感じでよろしいでしょうか

OSはwindows xp sp3 32bitです
rubyはActiveScriptRubyの最新版1.8.7をインストールしています
デスクトップのショートカットアイコンを”変更”したいのですがその方法がわかりません
自分なりにいろいろがんばってみたのですが力不足のようです
もし知っている方がいらっしゃいましたらご教授いただければ幸いです
ご指導の程よろしくお願い致します

121 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:17:33 ]
>>120
その話はWindows板で回答待ちじゃないのか?
>>113-114の流れはおかしくないと思うが、直後に>>115,120となる意味が分からん

122 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:22:41 ]
もういいです


123 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:23:53 ]
>120
Windows板で回答待ちの質問をこっちに持ってくるなよ
向こうの住人に失礼だぞ

124 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:24:29 ]
流れがどうのこうの
聞いてるんだから
可能か不可能かくらいは
こたえてくれても
いいんじゃないの


125 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:27:32 ]
RubyプログラムでWindowsでのショートカットのアイコンを変更したいというんだったら
WIN32APIでも叩けば「可能かもしれない」。
俺はやったこと無いから知らないけど、詳しい人が答えてくれるかもね。

Rubyのショートカットアイコンを変更したいという話だったら「可能」だけど
スレ違いだから出て行けって言われてる。



126 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:29:36 ]
>>113
>スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
>でも作業フォルダにはこれと同じファイルがありません
>意味がわからないのですが・・・

意味が分からないのはキミの質問のほうだな。
Windowsがないから正確なことはわかんないけど、
「スタートメニュー」> 「すべてのプログラム」>「Ruby 1.8」
の中に「ruby console」というのがある、ということがいいたいのか。
しかし「作業フォルダにはこれと同じファイルがありません」という部分は意味がわからん。
再提出!


127 名前:見習い ◆YG1xRh8M6Ffb mailto:sage [2009/09/18(金) 20:29:54 ]
アイコン変えるくらいで
えらいたいそうなことやね
あきらめますわ
ありがとう

128 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:39:34 ]
1. まずruby consoleってのを削除する
2. パスを通す
3. 普通にコマンドプロンプトを使う

129 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:45:02 ]
アイコンとかどうでもいい事にこだわるのはマカ。
ルビー使いたいなら教祖も使ってるデビアン推奨。

130 名前:デフォルトの名無しさん [2009/09/18(金) 20:45:18 ]
アイコンを右クリック→プロパティ→カスタマイズ→アイコンの変更→好きなのに換える

131 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:46:54 ]
ショートカットの場合は「カスタマイズ」を「ショートカット」に読み替えてね。

132 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 20:48:45 ]
あれは許容範囲を超えたダサさだからなあ
GRScript18.dllのリソースを書き変えたらいいんかな
真面目な話、アイコンをartonに送るというのが真の解決法だ

133 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:09:34 ]
初心者さんがだんだんグレて来ててワロタ

134 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:29:21 ]
そろそろ悪態をつくころだね

135 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 22:20:56 ]
>>130-131
アドバタイズショートカットなめんな



136 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:19:34 ]
ひまなおっさんの釣りなんじゃないかと思えてきた。
日本語がおかしいし、いくら初心者でもこれはないだろ。

あるいはリアルに小学生なのか。

137 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:25:08 ]
[ [1,2,3],[4,5,6],[7,8,9] ] → [ [1,4,3],[4,10,6],[7,16,9] ]

↑のように、配列の配列の2番目の要素だけ2倍にしたい
ときはどのように描けば短くかけますか?



138 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:29:04 ]
まずはうんざりするくらいまで each 使い倒せ

Enumerable や Array の各メソッド内部でどう each が使われているか推測できるようになれば
いちいち他人に聞かなくても一発で書き下せる
特殊動作のメソッドだけ聞きかじりで使ってても応用できないぞ

139 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:36:38 ]
>>137
とてもRubyらしく書くとこうなる

L = [ [1,2,3],[4,5,6],[7,8,9] ]
for e in L do e[1] = e[1] * 2 end

140 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:38:18 ]
Array と String と Enumerable と Hash の4つはメソッド一覧をどっかに書き出しておくといい
この 4つのクラスのメソッドの動作が頭に思い浮かべられるようになると、
Ruby スクリプトを書くのにかかる時間が一気に半分以下になる

てか、それこそ each じゃ駄目なん? めっちゃ短いと思うんだけど

arr = [ [1,2,3],[4,5,6],[7,8,9] ]
arr.each{|a| a[1] *=2}
p arr

141 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 23:50:05 ]
>>139,140
非破壊的にやるとすればどうする?

142 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:54 ]
>>141
L1 = [ [1,2,3],[4,5,6],[7,8,9] ]
L2 = Marshal.load(Marshal.dump(L1))
for e in L2 do e[1] *= 2 end

>>139ともども本当にごめんなさい

143 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:59 ]
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所

144 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:01:59 ]
arr2 = arr.map{|a| b = a.dup; b[1] *=2; b}

145 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:28:11 ]
>>142,144
なるほど。ありがとう。




146 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:33:02 ]
>>139>>142
方言わらたw

147 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 00:52:29 ]
>>142
初心者スレではそういうのやってほしくないなあ。冗談を冗談と見抜けないのが初心者なんだから。
しかも冗談としてもつまんないし。

148 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 06:34:59 ]
Marshalとかw さすうがに冗談も大概にしろよw

149 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 07:11:56 ]
>>148
君の釣りはつまらない
Marshal.dump+load は dup の shallow copy で済む今回は牛刀だが手段としては妥当だ

150 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 07:48:50 ]
>>149
なぜ、Marshalを使う必要があるかわからん。dupですむなら、それにこしたことないのではないか

151 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:07:50 ]
dup では「済まない」から>>144ではわざわざ1つネストした map の中で dup してるのだろ
dup で済むというのは

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
arr2 = arr.dup
arr2.each{|a| a[1] *=2}
p arr

これが [[1, 2, 3], [4, 5, 6], [7, 8, 9]] を表示するようなことを言う

ネストした配列のような参照だらけのオブジェクトの完全な複製を作る手段は
プリミティブなオブジェクトを見つけるまで深く潜って dup することだが
これをほぼどんなオブジェクトに対しても自動で(結果として)行う一般的な手法が dump して load
事前情報(配列の配列の要素がプリミティブである)を利用して決め打ちで手動で行ったのが>>144

そんだけ
どちらも特段変ではない
初心者向けでないとして突っ込みが入ったのは for と定数のほうだな

152 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:17:24 ]
>>151
だったら>>142の段階で簡単な説明をつけましょう。
なぜMarshalを使ったのかという説明がないため、初心者は理解できないし他の人も混乱するだけです。
ここは初心者のための回答が期待されるところであり、初心者が理解できない回答を書いて「Marshal使ってるオレかっこいい」とひたる場所ではありません。
スレの趣旨を理解しましょう。
151が142と別人だったらごめんね。

153 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:32:23 ]
俺もちょっと不思議に思ったからググってああなるほどと思ったクチだが
別に「Marshal使ってるオレかっこいい」じゃないだろw
Ruby本でも書かれるような一般的な小技なんだろ

まあ上でも言われてるが初心者にネタを見抜けってのはきついから
ネタなしかネタだと明らかに分かるよう書いてほしいのはあるが

154 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:37:29 ]
>>152
知らんよ
Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ
きちんとマニュアルにも書い…書…注釈に小さく書いてある
ttp://www.ruby-lang.org/ja/man/html/Object.html#footnote-1

知っていることも使用することも問題は特段存在しない
Marshal.dump を知っているレベルで for や定数を使うことが「ありえない」から叩かれてるのだろ

155 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:39:34 ]
Array や Hash の複製が欲しいときにいつも歯がゆく思うんだけど
なんで Object には deep copy のためのメソッドがないのかな?

サブクラス作るたびに適切にオーバーライドする必要が出て面倒だからだろうか



156 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:56:27 ]
>>155
実際にRubyスクリプトとして作るとわかるが循環解決でわけわかめになる
marshal.のソース流用しようとするとT_DATAであっぴゃーになる
dumpしてloadよりも早くてうまくて短い実装があるならMLで発表だ

基本、ディープトラバースして欲しくないらしいぞ
Rubyで提供されてるディープトラバース手段はMarshalだけだ
Marshalできないやつはそもそも複製できんオブジェクトだったということで

157 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:23:29 ]
怖いからYAMLにして戻すってのは?w

158 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:30:36 ]
>>154
>知っていることも使用することも問題は特段存在しない
問題はそこじゃない。初心者への回答という観点を忘れ、ろくに説明もなしにコードだけ書いて満足していることが問題。

159 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:39:28 ]
dump が目的の場合に Marshal ではなく YAML を使うメリットはゼロ

160 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:40:25 ]
>>158
説明はされた

161 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 09:56:20 ]
説明しなくても分からなきゃ自分で調べるだろ

162 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:16:12 ]
>>160
あとからな。ここでいっているのは、最初の>>142の時点で何の説明もないことだろ。

163 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:26:23 ]
どうしてもMarshalに突っかかってるようにしか見えないが
そこは全く問題ないだろ

forの方を言うならまだわかるが

164 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:33:22 ]
なんか一人顔真っ赤にして頑張ってる姿が目に浮かぶんだが

>>147>>139,142のようなのは初心者に有害だからやってほしくないと真摯に考えるのなら
その場で「Rubyでforは滅多に使わねえよカスeach使え」
「大文字で始まる識別子は定数だからLとかそんな風に使うなボケ」
「巣に帰れ二度と戻ってくるな」といったツッコミをいれるべき

165 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 11:45:02 ]
Marshal を知らなかったのが悔しくて悔しくて悔しくて悔しくて悔しくてたまらないのだろ自称脱初心者が



166 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:02:02 ]
>>164は、>>142での説明がないのに「説明はされた」とほざいている>>160の必死の答弁でした。
160先生の次回作をお楽しみに。

167 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:05:26 ]
どっちが必死なんだよw

168 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 12:06:17 ]
マジ顔真っ赤だなあ・・・w
説明がないと思ったなら他の人が説明するもよし
分からなきゃそれを質問するもよし
だろう

169 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:40:16 ]
ごめん、俺がMarshalなんて・・・っていったばっかりに、こんなことに(´・ω・`)
ごめんなさい、ごめんなさい。双方とも頭冷やしてくだしあ

170 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:44:38 ]
いや、Marshalは正しい解答の一つでしょ
あやまるならforとか定数とか変に使ったことをあやまってくれよw

まあ(ちゃんとした)議論になればいろんな情報が出てくるからいいのかもしれんけどね

171 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 13:58:09 ]
>>142で既にあやまってるなw

172 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:23:19 ]
"[hoge]"とか"{hoge}"みたいな文字列の前後の括弧を取り外すのに

"[hoge]".sub(/\[(.+?)\]/){$1}

なんかじゃなくて、なんかもっとスマートな方法はありませんか?

173 名前:172 mailto:sage [2009/09/19(土) 14:26:22 ]
できれば
"[hoge]".split(//)[1...-1].join
も無しの方向で。

174 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:28:01 ]
"[hoge]"[1...-1] では駄目と申すか。

175 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:36:42 ]
String[] の動作が期待に添っていて、短いのがスマートだと勘違いしているのなら、>>174
そのまんまの正規表現でマッチした部分を取り出す以上のわかりやすいスマートなものはないかと思われ

str =~ /\A[\(\{\[<](.+?)[\)\]\}>]\Z/; $1

開きカッコの対応を取るライブラリは標準では無いので自作してくれ



176 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:38:04 ]
というかカッコの対応は正規表現では本来書けない。
とCマガで大昔に読んだけど、最近の拡張しまくりのだと可能かもなー。


177 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:48:30 ]
後ろの1文字はchopで毟れるけど、先頭の1文字を毟り取るメソッドっ
てないよな。


178 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:51:08 ]
>>177
その手があったか

"[hoge]".chop.reverse.chop.reverse

179 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:52:59 ]
>>178
ちょwwwwwプwwwww

180 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:54:21 ]
小橋の回転チョップを思い出した

181 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 17:26:08 ]
右のほうをチョップされたら左のほうを差し出せ

182 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 20:20:22 ]
×ほう
○ほお

183 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 20:28:43 ]
>>172
"[hoge]"[/\[(.+?)\]/, 1]
とも書ける。

>>175
Onigurumaならできるはず。

184 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 21:00:13 ]
すんません。このスレどっからドコまで自作自演なんてしょうか?

185 名前:デフォルトの名無しさん [2009/09/19(土) 21:06:16 ]
ココまで俺の自演



186 名前:デフォルトの名無しさん [2009/09/20(日) 05:42:36 ]
require ってなんで複数のライブラリ名を受け付けないんでしょうか。
けっこう不便なんですけど。

187 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 05:58:31 ]
>>186
リファレンスを見たらわかることではないでしょうか?

188 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 06:35:34 ]
書いてはあるが、意図を読み取るのは不可能だと思う

>>186
require が真偽値を返すメソッドとして作られているから、がいちおうの答
複数受け取ったときは真偽値の配列を返すようにしてもいいんだけど、おおむねキモい

each で回してもいいはずなんだけど、そういう人はなぜか見ないね

189 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 06:46:28 ]
かなり初期に一瞬だけ実装されたことがあったと記憶
false が返ってきたほうが便利だということでお流れになったんでなかったかな

190 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 07:50:00 ]
ふとした疑問なのですが、Mechanizeのテストというのはどのように書いたものでしょうか?

191 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 08:22:58 ]
>>190
FakeWeb 1.2.6 API Documentation
fakeweb.rubyforge.org/

FakeWeb使ったらいけるかも…

192 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 11:46:12 ]
test

193 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 11:51:53 ]
>>192
それはRubyで作った2chブラウザのテストですか?

194 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 12:34:04 ]
186です。

>>188
なるほど!たしかにrequireは戻り値がありますね。でも戻り値を気にする場面っていうのはまれなので、
そういう理由で複数の引数を指定できないのはちょっと勿体ないですね。

Railsとかには require_all というのがあるそうなので、戻り値を気にしなくていいから
引数を複数とれるバージョンのrequireを、requireとは別に用意してほしいなと思いました。

195 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 12:34:37 ]
yes,we can



196 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 12:59:39 ]
>>194
なければ自分で作るという選択肢ももとう

197 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 13:01:42 ]
require を再定義すればいい。


198 名前:デフォルトの名無しさん [2009/09/20(日) 16:09:37 ]

..  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
                 /\(<●>)/\    /\(<●>)/\
                 /\(<●>)/\  /\(<●>)/\
                /\(<●> )/\  \(<●>)/\
             /        \\(<●>)/\
           /   ,ゝ===く   <●>)/\  
           !  γ      `ヾ,_   \
          │ :く(   r,J三;ヾ   )>   \
          l    =; {三●;= }  ,=ニ    l
           ヽ   ゝ≡三=イ       /     <>>1ワロタw
            ヽ       .,,,.    /.|
               ヽ  'ぐ'''''''' /    / ト,
             ヽ.  ヾ''" /  /  |ヽ
             ,./ヽ  `´  /    ./  \、
      -‐ '''"  ̄ /  :| \,,,__,,,, /    /    | `'''‐- 、.._\


199 名前:デフォルトの名無しさん [2009/09/20(日) 16:17:33 ]
eRubyとMySQLをつかって、DBに写真のアップをしたいのだけど

<form action="syasinhenkou.rhtml" method="post" enctype="multipart/form-data">
<input type="file" name="syasin" size="30" maxlength="100">
<input type="hidden" name="id" value="<%= cgi["id"] %>">
<input type="submit" value="登録">
</form>

ってかんじで、ファイルを登録用のページにおくりたい

sql = "UPDATE rireki SET"
sql += " syasin = '" + cgi["syasin"] + "'"
sql += " WHERE id = '" + cgi["id"] + "'"
sql += ";"
my.query(sql)

受け側はこんな感じで書いてみた。
IDのところに変な文字列が入ってアップデートされないいのだけど
enctype="multipart/form-data"のオプションのせいだよね。
ファイルを送るときは、このオプションがいるみたいだけど
どうしたらいいかな?

DB側のidがキーで文字列、syasinがBLOB型でやってる
これでDBにファイルが送れるのかもよくわからんのだけど
教えてくれるとありがたいです。

200 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 17:25:56 ]
>>199
idの所が変になるんじゃなくて、cgi['syashin']以降が変になってるはず
blobとかのバイナリオブジェクトは文字列の連結でSQLを作れない
プリペアードステートメントとかを使え

201 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 17:56:53 ]
blobじゃなくても普通プリペアードステートメント使うとこだろ

202 名前:デフォルトの名無しさん [2009/09/20(日) 18:41:08 ]
何で空配列がかえってくんねん
空文字列ちゃうん?

>> "a".split(/a/)
=> []
>> "aa".split(/a/)
=> []
>> "ab".split(/a/)
=> ["", "b"]


203 名前:デフォルトの名無しさん [2009/09/20(日) 18:43:58 ]
空配列に空文字列がつっこまれるべきちゃうん?

[""]

204 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 18:57:36 ]
>>194
%w(lib0 lib1 lib2).each{|feat| require feat}
でいいじゃん

205 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 19:12:10 ]
>>202-203
新リファレンスマニュアルから抜粋

> instance method String#split
> split(sep = $/, limit = 0)

> 第 2 引数 limit は以下のいずれかです。

> limit == 0
> 分割個数制限はなしで、配列末尾の空文字列を取り除く
> limit < 0
> 分割個数の制限はなし

「配列末尾の空文字列を」いくつあっても全部「取り除く」ってことなんだろうな多分
それがデフォルトの動作である理由は知らん



206 名前:デフォルトの名無しさん [2009/09/20(日) 19:23:06 ]
> 「配列末尾の空文字列を」いくつあっても全部「取り除く」
こんなん知らへんかったがな。おーきに

理由は実装上の都合なんやろなぁ

207 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 19:33:54 ]
Perlがそうだったから。
Perlがそうだった理由は知らん。

208 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:23:37 ]
>>206
web上では関西弁禁止だよ?知らないな?他の方言ならいいけど


209 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:53:07 ]
>>199
syasinじゃなくてphotoとかpictureつかえ

210 名前:デフォルトの名無しさん [2009/09/20(日) 23:01:59 ]
1.9からThreadにかわりFiberというのが入ったそうですが、どうやって使うものでしょうか。
ぐぐってみたけど、上級者向けの説明しかなくてさっぱりでした。
例:Fiberはいわゆるコルーチンです。←コルーチンが何かわからないからさっぱり理解できない説明

高校生でもわかるような説明をどなたかお願いできますか。

211 名前:デフォルトの名無しさん [2009/09/20(日) 23:13:30 ]
>>200-201
Ruby/MySQLではプリペアードステートメントつかえない?

MySQL/Rubyじゃないとだめ?

212 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:17:15 ]
>>210
Threadなくなったわけじゃないし、上級者(地雷踏み?)向けの機能だから忘れていいよ
否定的なこと言われてるし
ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31601

213 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:58:30 ]
>>211
こんなのもある
d.hatena.ne.jp/tmtms/20090729/1249183003

214 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 00:21:13 ]
>>211
出来るみたいだけど使ってないんで確認はしてない
ttp://planet.mysql.com/entry/?id=18088
stmt = my.prepare("select ?,?")
stmt.execute 123, "abc"
stmt.fetch # => [123, "abc"]

215 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 00:43:01 ]
refe2簡単に入れたいけどパッケージとかある?



216 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 00:58:24 ]
そんなに面倒なことはない気がするんだが

217 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 01:37:34 ]
>>213-214
プリペアードステートメントは
MySQL/Rubyをいれて解決した

あとは、ファイルのアップだけど
st = my.prepare("UPDATE rireki SET syasin = ? WHERE id = ?")
st.execute(cgi["syasin"].read,cgi["id"].read)
res = st.fetch

って書いてみたところ、MySQLのほうから

2053
Attempt to read a row while there is no result set associated with the statement

って怒られた・・・・BLOBだとだめなんか?
こんなところで詰まってるようだと、表示にもてまどりそう
っていうか、表示できるのか?


218 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 03:42:41 ]
MySQLの本でも買えよ・・・またはRails使うか

219 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 04:02:16 ]
>>217
エラーメッセージの意味はわかる?
SQL文を実行したけどresult setが返されなかった、なのに行を読み込もうとしてエラーになっている、という意味。
SQLをみるとupdate文を実行しているよね。だからresult setは返ってこない。なのに st.fetch しようとしているからエラーになっているだけ。
これがselect文だったらfetchできるけど。

220 名前:デフォルトの名無しさん [2009/09/21(月) 11:47:02 ]
>>219
SERECTしたらはいってた〜〜!!
ありがと〜〜!!!

表示のほうも、相談にのってください
格納したデータを

<img src="data:image/jpg;base64,/9j/4AAQ....中略.....">

って感じには表示できるのですが
これだとIE6では見れない。
エンドユーザにFF入れろとか言えないし
IEでも表示させる方法ありますかね?

221 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 12:24:04 ]
もはやRuby関係なし

222 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 12:41:30 ]
どうみてもHTMLの質問です
動的か静的かは用途次第だけど、素直にURL割り当てろって

223 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 12:54:14 ]
pc12.2ch.net/test/read.cgi/tech/1251609039/
スレ立てるまでもない質問はここで 100匹目
pc12.2ch.net/test/read.cgi/tech/1054813207/
【漏れは】猫でもわかる質問スレ【猫以下です】

224 名前:デフォルトの名無しさん [2009/09/21(月) 13:26:50 ]
>>220
アホだなぁ。
base64デコードして出力すればいいだろが。
Content-Typeヘッダも適切に吐いてね。

あ、スレチだね。

225 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 13:51:04 ]
>>220
さすがにスレ違いすぎるけど。
src="data:..." は IE6 ではサポートされてない。これはブラウザを変えてもらう以外に方法はない。
だから data: を使わずすなおに画像を別ファイルにしておこう。

あるいは example.com/cgi/jpg.cgi?base64=.....(base64文字列)....
が画像ファイルを返すようなCGIを用意して、
src="data:..." をすべて src="example.com/cgi/jpg.cgi?base64=...." に変換するとか。



226 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 18:26:18 ]
アホです。すんません。
>>224-225
URLの?以降の文字列はENV['QUERY_STRING']で受け取れるはず
そいつをデコードして元に戻すって考えて

#!/usr/local/bin/ruby
require 'base64'
file = ENV['QUERY_STRING']
out = decode64(file)
print "Content-Disposition: filename=\"syasin.jpg\"\n"
print "Content-type:image/jpge\n\n"
print out

って言う具合に組んでみた。
700バイトとかの小さいファイルだとうまく行くんだけど、
8kぐらいのファイルになると表示できなくなるな

そもそも、CGI呼べてないっぽい
これもRubyのはなじしゃないよね(涙

227 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 18:59:21 ]
アホなりに解決しました。

どうもbase64のコードが長すぎでうまく行かなかったっぽいので
idを指定してDBから画像を引っ張って垂れ流すだけのCGIを作成しました。
idなら長くても50桁とか行かんので、これで解決!!
いろいろ、ご迷惑おかけしました。
ヒント本当に助かりました。ありがとうございます。

228 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 19:05:28 ]
>>226
>700バイトとかの小さいファイルだとうまく行くんだけど、
>8kぐらいのファイルになると表示できなくなるな

ENV['QUERY_STRING'] をそのままつかってるのが問題なんじゃないかな。
(つまりENV['QUERY_STRING']に %2F や %2B が含まれているんだろう。)
URLエンコードされているからデコードしないと。
require 'cgi'
qstr = ENV['QUERY_STRING']
out = decode64(CGI.unescape(qstr || ""))
詳しくは
ttp://blog.s21g.com/articles/319
をみてくれ。


229 名前:デフォルトの名無しさん [2009/09/21(月) 20:00:17 ]
いやいや、というか
そんな巨大なデータをクエリ文字列としてURIで渡すなよ、と。

230 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 20:02:48 ]
URLの長さ上限は、普及しているブラウザでは、一番短かいIEが
2083バイトだったかね。



231 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 20:04:53 ]
一発でroot奪取されかねない素敵コードだな

232 名前:デフォルトの名無しさん mailto:sage [2009/09/21(月) 21:06:05 ]
なんかワロタw

233 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 14:17:19 ]
ルヴィーっておもしろいですか?ルヴィー使ってる友達が、開発者が日本人だから誇らしいと言ってました

234 名前:デフォルトの名無しさん [2009/09/22(火) 14:23:06 ]
>>233
またお前か。
もういいから自分の巣に帰れ!

235 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 15:31:24 ]
URIのやり取りでトンネル掘り出すアフォとか出てきそうだな。



236 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 19:39:02 ]
$0とか__FILE__とかARGFとか・・・
最初から備わってる変数が色々ありますけど、どうしてこんなに表記法に統一性が無いのですか?

237 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 20:31:24 ]
変数

238 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:03:37 ]
>>236
Larry Wallに聞いてくれ

239 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:08:08 ]
Larryにそんなことを聞いたら
Perlの文法が言語学的にどう優れているのかの講義が始まるぞ
そしてハッシュの頭になぜ%が付くのかを聞いたらPerl信者になること確実だからやめておけ

240 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:28:45 ]
$0はsh
__FILE__はC
ARGFはARGVの発展系、ARGVはCのmain関数の引数argvが元になっている
どれもこれもunix+Cを知ってれば、なじみの物ばかりだ

241 名前:236 mailto:sage [2009/09/22(火) 22:02:34 ]
ありがとうございます。他言語からの習慣に習って付けてるんですね。
でもARGFはどうして定数なんでしょうか?Cだとargvなんかは変数ですよね。
__FILE__は擬似変数で$0はグローバル変数と全部違うけど、どれもグローバルにアクセスしたいものだから
統一してしまえばいいのに、と思ったのです。
ここら辺の、定数やグローバル変数、擬似変数といった使い分けは実装内部のことが分かるような人じゃないと理解できないのでしょうか。

242 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:06:29 ]
ARGFは大文字で始まる
__FILE__は違う


243 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:08:10 ]
定数だったNILが変数nilになったりしてるから絶対的な境界は無いんだろう
ARGFをグローバル変数にするのはおかしな話だが、何でといわれても説明できん

244 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:23:44 ]
ARGFはARGVの発展系、ARGVが大文字でグローバルなのは多分awkが元
他の言語もそれに習ってるからrubyもそれに習っているんだろう

245 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:27:10 ]
>>241
どこかでMatzが
「特殊変数周りの仕様はPerlから引きずった。今では後悔している」
的なことを書いてたような

いずれにせよ、一貫性がないという意見には同意



246 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:41:46 ]
Perlからの脱却
ってのがRubyの精神じゃなかったっけ…

247 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 22:44:06 ]
Ruby2.0では特殊変数は一新するんじゃない?

248 名前:デフォルトの名無しさん [2009/09/22(火) 23:22:18 ]
以下のような感じでセッションにアクセスしているのですが
リロードするたびにセッションIDが変わってしまいうまく数値を取り出せないです。
どなたか助言をよろしくおねがいします。

def GetSession()
cgi = CGI.new
session_option = {"tmpdir" => "./"}
session = CGI::Session.new(cgi, session_option)
return session
end

249 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:43:38 ]
色々と突っ込みたい所はあるが、まずはtmpdirにセッション情報が書き込まれたファイルが存在しているかどうかを確認するんだ。

250 名前:デフォルトの名無しさん [2009/09/22(火) 23:48:07 ]
ファイルが作成されているのが確認できました。
リロードするたびに増えていきます。
サーバー側の問題でしょうか?

251 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:58:52 ]
ようし、じゃあ次はFirefoxにFirebugを入れてcookieの受信と送信ができているか確認するんだ。
CGIモジュールの仕様はよく知らんが、きっとセッションIDをクッキーに入れて送ってきてくれているはずだぞ!

252 名前:デフォルトの名無しさん [2009/09/23(水) 00:15:52 ]
クッキーのリストが反応しないみたいです、他のサイトだとExpiresの項目にsessionというのが出てきています。

253 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 00:50:05 ]
で、セッションを発行したときのレスポンスヘッダにSet-Cookieはあったのか?

254 名前:デフォルトの名無しさん [2009/09/23(水) 00:58:52 ]
まじキチ…ユダヤが人工地震を起こすぞ

【緊急情報カクサンよろしく】

ついに来ました。

大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。

友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。

四川地震より大きいのが来る可能性があります。
g★olde★ntam★atama.b★lo★g84.fc2.c★om/

★★★★★危険度MAX★★★★★
★★★★★★★★★★★★★★★★

★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★
★千葉、静岡、東京、関東で大地震が起きる可能性が非常に高くなっています★★★

★★★★★★★★★★★★★★★★
★★★★★危険度MAX★★★★★

警告!連休中の21、22、23日が危ない!かも2
live24.2ch.net/test/read.cgi/eq/1★253494015/
【大気イオン】e-PISCO Part11【また延長】
live24.2ch.net/test/read.cgi/eq/1★252991726/

本当に地震が来たら、犯人は特権階級全員だということ2


255 名前:デフォルトの名無しさん [2009/09/23(水) 01:01:28 ]
すいませんレスポンスヘッダを確認することができませんでした。
Firefoxのコンソールで確認できるような事を書いてあるサイトを見つけたのですが
うまく確認できませんでした。



256 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:04:36 ]
>>2555
Firebugでの見方がわからんならLive HTTP Headers入れろ。


257 名前:デフォルトの名無しさん [2009/09/23(水) 01:17:14 ]
ありがとうございます、インストールしてみました。
レスポンスヘッダにCookieと名前のつく項目はなかったです。

258 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:20:23 ]
じゃあそれが原因だろw

ってかCGIクラスのインスタンスって何度も生成したらバグるんじゃないの?
関数の中でインスタンス作成して、破棄しているあたりからして使い方が間違ってるんじゃないのかと。

259 名前:デフォルトの名無しさん [2009/09/23(水) 01:26:40 ]
なるほど、少し簡単なプログラムを作って実験してみます。
rubyは明確なルールが分かりづらくて難しいですね。

ありがとうございました。

260 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:32:05 ]
問題はHTTPの理解のほうじゃないだろうか。


261 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 01:46:05 ]
>>248
たんにHttpヘッダーを送信してないだけかも。
「ruby cgi session」でぐぐったら、こんなページがあった。
ttp://d.hatena.ne.jp/tilfin/20080229/1204360284
参考にしてみて。

262 名前:デフォルトの名無しさん [2009/09/23(水) 02:23:35 ]
ありがとうございます、確認してみたらヘッダーはERBを処理した後に追加しているので問題なさそうでした。
erb = File.open(path) { |f| ERB.new(f.read) }
print cgi.header + erb.result(binding)

以下のようなtest.rbというのを作成して実験してみたところうまくいきましたが
本番用のソースだとうまくいかないようです><
#!/usr/local/bin/ruby
require 'cgi'
require 'cgi/session'
cgi = CGI.new
session = CGI::Session.new(cgi)
print cgi.header
print "session test'#{session.session_id}'\n"


まだ解決していませんがデバック方法やアドバイスなど、とても勉強になりました。
本当にありがとうございました。
もう少し自分なりにrubyやhtmlの勉強を行ってみます。

263 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 07:51:45 ]
どうしても分からなければ
ソースをまるごと貼り付けて、アドバイスを求めるという手もある
もちろん自力で解決できるならその方がいいけど

264 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 08:05:08 ]
2chに投稿するとインデントがなくなってすごく見にくいんだけど、JaneStyleのリンクポップアップで
見るとちゃんとインデントされてる!

それをコピーしたらインデント付きでコピーもできる!
全角スペースや&nbsp;によるインデントを使う必要なし!

265 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:05:48 ]
>>264
書き込み時に置換面倒なんだけど、ソースとリンクを毎回書き込むのが面倒なのだが



266 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:15:02 ]
コードを貼付ける場合、どうせなら
ttp://pastie.org/
とか
ttp://gist.github.com/
とか使うといいんじゃないかな。
詳しくは ttp://journal.mycom.co.jp/news/2009/02/09/014/index.html


267 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:20:00 ]
長い場合はそのほうが望ましいけど
短い場合はそのまま貼ってくれたほうがいいな

あとインデント類の扱いは2chブラウザごとに全然違うらしいよ

268 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:32:03 ]
rubyのせいにしてるが、http知らないと実装は無理なんじゃ。

269 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:35:06 ]
CGIも知ってないと無理な悪寒

270 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:38:57 ]
アホばっかだな・・・
ソース張ってるんだからrubyが原因って一発で原因わかるだろw

271 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 11:52:44 ]
正しくrubyをかくための
http,cgiの前提知識が足りないのかもしれん

272 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 19:47:00 ]
Rubyって、GUIアプリを作れるの?

273 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 19:56:01 ]
Ruby 自身は GUI 部品を持ってない
GUI 部品を司る他の言語や API を直接呼ぶ

一般論としては、GUI が目的なら Ruby を使う理由は何もない
素直に GUI 部品を提供する他の言語を使え
Windows でウィンドウを表示したけりゃ、そりゃ C# を使えばいいのさ

274 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:03:27 ]
うわ 糞言語じゃん

275 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:05:01 ]
>>274
GUI部品がどういうふうに成り立ってるか理解してないだろ、おまえ。




276 名前:デフォルトの名無しさん [2009/09/23(水) 20:11:42 ]
>>274


ま た お ま え か !



277 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:13:41 ]
Ruby/Tkの不遇って本当なんだなあ・・・

278 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:24:45 ]
>>277
Windows環境の俺に言わせると
ActiveTclを別に導入しなければならないあたりが原因
Exerbでまとめて配布できるWxRubyと比べて、いろいろ不便だ

279 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:29:24 ]
Win32API経由なら「ActiveTclを別途インストールしてください」という必要もない
Tclの文法をわざわざ勉強する必要もない
アリモノ全部で賄える

280 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:33:10 ]
One Click InstallerにはRuby/Tk最初から入ってなかったっけ
まあPythonでTkinter使ったら幸せになれそうなケース

281 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:35:56 ]
ruby厨涙拭けよ

282 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:47:46 ]
というかTkってけっこう大きいんだよね

必要な人だけ適当に別途入れて使って、というスタンスにしておいたら
実行環境持ってない人に配布するという場合のサポートがすっこんと抜けた
そこまでRubyでやらなくてもいいじゃん却って不便だろ、と思うんだけれど

283 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 20:48:31 ]
あれ? どこか涙流すような流れになってたっけ?


284 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:05:57 ]
jruby でいいじゃんじゃん。

285 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:09:32 ]
pythonに標準添付されてるtkをrubyから使う事って出来るん?



286 名前:デフォルトの名無しさん [2009/09/23(水) 21:18:26 ]
Linux使ってるけど、Ruby/gtk2が便利。書きやすい。
シグナルまわりの書き方が好きだ。

287 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 21:36:19 ]
>>279
? どういうこと?
dllファイルを直接呼べばいいってこと?

288 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:15:39 ]
Win32APIでやれることだけでなんとかしろって意味だと思う

289 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 22:18:29 ]
Win32API向けにヘッダファイルの翻訳やってくれたりするライブラリでもあるの?

290 名前:デフォルトの名無しさん [2009/09/24(木) 07:36:30 ]
gemのjsonライブラリって日本語まんま変換できないの?
UTF8で["ほげ"].to_jsonとかすると["\u307b\u3052"]とかなっちゃうんだけど

291 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:05:05 ]
いやそれそのまんまだと思うのだが

irb> puts JSON.parse(["ほげ"].to_json)
ほげ

何か問題ある?

292 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:42:47 ]
javascript内では日本語は直接記述しないとか、そういう話?

293 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:45:26 ]
>>290
JSONの仕様としては変換するのが正しい。
ただ、それが日本人にとって便利かどうかはまた別の話。
ユニコードに変換させないオプションがほしいよね。

294 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:47:18 ]
>>293
ごめん、ウソ書いた。「変換するほうが仕様上正しい」というのは間違い。
JSONでは文字列中に日本語をかけるはずだね。

295 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 08:49:10 ]
機械が生成した JSON はたいてい Unicode エスケープで日本語が書かれてるぞ
仕様上はエスケープしても構わない(may)のでたいていのライブラリは自動エスケープする
そのほうがめんどくさくないからというのが積極的理由

JSON を生で読むなバカという意図が働いてるという気はせんでもない



296 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:34:48 ]
便乗して質問

JSONやYAMLに変換したとき、日本語をそのまま出力してくれるライブラリって
AnJSONやYa2YAMLぐらいしか知らないんだけれど
他に同じことができるライブラリってないかな

297 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 09:48:05 ]
Jsonて生で読むなっていうようなものなの?
生で読めるのもいいところの一つだと思ってたんだけど

298 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 10:45:45 ]
クラス変数が定義されているかどうかを調べる方法ありますか?

299 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:18:24 ]
class_variable_defined?

300 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:26:31 ]
Perlでは複数の返り値(リスト)があって、必要のないものには、以下のようにundefと記述しますが、

my ($second, undef, $hour) = localtime;

Rubyではどのように書くものなのでしょうか?

def meth
return 1, 2, 3
end

a, ??, c = meth

301 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 11:46:53 ]
>>296
Rubyでは知らない。
PythonのYAMLライブラリは、オプションでユニコードに変換する・しないが選べるんだけど、
同じようなオプションがRubyにも欲しいよね。

>>300
特に用意はされてないと思うので、いらない変数を指定するしかないんじゃないかな。
a, _, c = meth
とか
a, dummy, meth
とか


302 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:00:51 ]
>>301
ダミー変数を使うしかないんですね。
了解しました。

303 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:31:35 ]
>>299
古いオンラインマニュアルでは載ってないclass_variable_defined?!古いオンラインマニュアルでは載ってないclass_variable_defined?!じゃないか!

304 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:34:56 ]
class_variable_defined? が載ってない HTML ヘルプ版マニュアルは持ってる
これでも一応 1.8.6 対応だったはずなんだが
まいっか

305 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 12:36:10 ]
大事なことなので2回いいました



306 名前:デフォルトの名無しさん [2009/09/24(木) 17:08:05 ]
Mix-inが言語的にサポートされていると聞いてRubyに心ひかれてます。
とはいえまだ使ってませんが。普段はC++/Javaを使っています。

Mix-in するモジュールを A、その中で定義されているメソッドを foo
とすると、foo からは A を Mix-in した側のクラス C1 内のメソッドを
使うことができるんですよね?

そのクラス C1 をさらに継承して C2 としたらその C2 で定義した
メソッドも呼び出せるんでしょうか?

C++の仮想関数や仮想関数テーブルとのアナロジーで説明してくれている
ページってありませんか?

307 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:23:53 ]
これ貼ると人によってはなぜか大変がっかりされるんだけど

>>306
irb> module A; def foo; 'foo!'; end; end
irb> class C1; end
irb> p C1.ancestors
 [C1, Object, Kernel]
irb> class C2 < C1; end
irb> p C2.ancestors
 [C2, C1, Object, Kernel]
irb> class C1; include A; end
irb> p C1.ancestors
 [C1, A, Object, Kernel]
irb> p C2.ancestors
 [C2, C1, A, Object, Kernel]
irb> p C2.new.foo
 "foo!"

こうなる
Ruby のクラスは再オープン可能でそれが日常であることに注意のこと
Ruby は ancestors に含まれている「前のほうのクラスやモジュール」からメソッドなどを探す
C2 は [C2, C1, A, Object, Kernel] になっているが、
これだと C2 を探して C1 を探して A を探して Object を探す
もし C2 に foo が定義されていれば、 順番表の下にある A の foo は呼ばれない
もし C1 に foo が定義されていれば、 順番表の下にある A の foo はやっぱり呼ばれない
Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能
継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念

irb> module B; end
irb> class C2; include B; end
irb> p C2.ancestors
 [C2, B, C1, A, Object, Kernel]

308 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:25:10 ]
C++ の vtbl の仕組みでは説明できません。
Ruby の場合「頼んで答えられれば答える」ただそれだけです。

309 名前:306 [2009/09/24(木) 17:26:45 ]
もう一つの疑問です。
二つのMix-inモジュール A, B をクラス C でMix-inしたとき、
AのメソッドからBのメソッドを呼び出すこともできるのでしょうか?

つまり A のメソッド foo を書くにあたって、foo の中で
呼び出す bar というメソッドを呼び出したいけど、
それはまぁどこかで実装されてるんだろうと思って
書いて構わないですよね?

その bar の実装は A を Mix-in するクラス C に書くべきなのか
ほかの Mix-in で bar の実装を提供することができるのか、
という質問です。

310 名前:306 [2009/09/24(木) 17:35:01 ]
>>307 , >>308
ありがとうございます。分かってきました(気がします)。
RubyというかMix-inという以前に頭が動的型付けの言語に
慣れていないことが原因だったように思います。

>Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能
>継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念

その解説ですっきりしました。
ということは >>309 も当然可能で
複数のモジュールを Mix-in したりさらに継承を続けたりして
メソッドの名前が重複する場合には、要注意、
つまり include の順番も依存するということですね。

311 名前:306 [2009/09/24(木) 17:38:28 ]
ということは言語仕様としてMix-inとしての制約を
課しているという点以外は Python の多重継承と
良く似ているなぁ・・・

どうしても業務が静的型付け・手続き型言語
べったりなんで、まだこっち方面(どっち?)は
指をくわえて見てるだけしたが、そろそろ。

312 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:40:18 ]
Matzは恥ずかしい表紙の本でMix-inは多重継承って言い切ってたな

313 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:44:20 ]
>>311 そんなあなたに Scala をどーぞ。

314 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 17:47:26 ]
>>312
多重継承の形してないだけで、実際は多重継承だと思う

 ・ 自作以外を include すると地獄
 ・ 自作でも 2つ include するとわけわかめ
 ・ 下手に include せずにクラスメソッドとして単体利用すると異常に楽

とか一緒

315 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:12:17 ]
弱めた多重継承には違いない
実装を共有しつつ、ダイヤモンド継承とか面倒な問題は生じなくなる

まあRubyの場合、今度は変数がぶつかる問題があるけど・・・・・
なんかSchemeの健全なマクロみたいに、
名前の衝突を自動回避できないのかね



316 名前:306 mailto:sage [2009/09/24(木) 18:26:57 ]
>>315
モジュールのメソッドの中で自由にインスタンス変数作れちゃうんですよね
そうするとたしかに変数名は衝突しますね。

317 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:13:26 ]
ま、>>315の言う通りだね。
多重継承には嫌な問題がたくさんあるけど、あれば便利な場面もある。
そこで、通常の継承は単一継承のみに制限した上で、多重継承したい場面のためにMix-inを用意してある、と。
この辺のバランスの取り方は、まさにRuby的。好き嫌いはあるとは思うが。

318 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:19:22 ]
実際問題として include ってあまりしないよねえ
やろうと思えばできるって感じ
慎重に設計した上で組み込む必要があるから、あまり気軽ではない

あと NameSpace::Application を include NameSpace して使う人はトイレのドア開けた瞬間に漏れろ

319 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:36:13 ]
Ruby1.8 で include REXML したときの defined?(Encoding) の誤爆なんとかしろとか言ってた奴もうんこ漏れろ
なんでもかんでも include するんじゃねえ
include は「クラスパス」を短くするために使うもんじゃねえ

irb> require 'rexml/document'
irb> "s".force_encoding('BINARY') if defined?(Encoding)
nil
irb> include REXML
irb> "s".force_encoding('BINARY') if defined?(Encoding)
NoMethodError: undefined method `force_encoding' for "s":String
   from (irb):4
   from /usr/lib/ruby/1.8/rexml/namespace.rb:37

これ関連で Ruby1.9 の文字列処理の場合分けを defined?(Encoding) でやってる奴も漏れなくうんこ漏れろ

320 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:41:52 ]
Ruby のバージョンだけが問題なんだから RUBY_VERSION で場合分けすべきだよね
defined?(Encoding) は時々見るんだけど、何が目的なのかな

321 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:51:16 ]
defined?(Encoding)って何がまずいの?

322 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:00:52 ]
Encoding という名前のモジュールまたはクラスまたは定数が定義されていること、ということしか調べられないこと
>>319 のような問題が起こるし、Encoding という名前のクラスかモジュールがどこかに存在してさえいればいいとか
Encoding という名前のクラスにならほぼ確実に存在して動作も確定なメソッドがあるという問題でもないわけで

文字列のエンコーディング処理に本当に必要なのはナニかというと Ruby 1.9.1 なわけで、
じゃあ素直に 1.9.1 の存在をチェックしたほうが素直なんじゃね、ということに

323 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:19:57 ]
>文字列のエンコーディング処理に本当に必要なのはナニかというと
つーか例えば>>319の場合ならforce_encodingの存在チェックをするほうがよくね?

324 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:27:53 ]
ダックタイピングとして意味がありゃあな

325 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:38:25 ]
エンコーディングではなさそうだけど:

1.9以降の機能と思ってバージョンでチェックしていたら
1.8.8にバックポートされたでござる、という場合を考慮すると
バージョンで全部OKというわけでもないだろうな。

ケースバイケースとしか。





326 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:43:06 ]
いやそれでもそれはバージョンでチェックすべきだろう
Rubyのバージョン名と機能の関係はそんなにまでも信頼できない魔境ではない
ソース触れる人がアップデートすべきだ

327 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 09:01:16 ]
ダッチタイピングに空耳した

328 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 15:43:22 ]
だからRUBY_VERSIONで分岐すんなつってんだろ

Encodingで被るなら::Encodingとか
String.method_defined?(:encoding)とか
使えよ


329 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:03:28 ]
ある機能を備えているかが定数の存在やメソッドの存在でしかわからないのが問題なのかな。
Open Classなのでいくらでも後から定数やメソッドを追加できるわけで。
かといって、Javaのパッケージみたいにドメイン名使って一意にするのも鬱陶しいけれど。

330 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:45:12 ]
RUBY_VERSION 否定派は何も根拠がないのが笑える

331 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 16:54:42 ]
やはり組み込みと添付は Std モジュールに全部入れておくべきだった

332 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:41:18 ]
>>330
1.9の機能を模倣する外部ライブラリができるかもしれないし
Ruby実装だって今やMRI一択じゃない
それと機能の有無で分岐してくれた方が後で読んだときに意図がつかみやすい

といっても俺自身否定派でもないから好きにすればいいと思うよ
できれば1.9スレや本スレとか然るべき場所でやってくれればなお良い

333 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 17:47:57 ]
涙拭けよ

334 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:12:41 ]
配列の中にハッシュ作りたいんですけど不可能ですか?

335 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:16:30 ]
irb> foo = [{"a"=>0, "b"=>1}]
=> [{"a"=>0, "b"=>1}]



336 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:17:59 ]
>>334
入れ子にすることは普通にできる

[{'key1' => 'val1'}]

以下のようなことはできそうだができない

['key1' => 'val1', 'key2' => 'val2']

以下のような使い方は一見無駄で遅いっぽい上に実際無駄だが、
Ruby ではけっこう普通にやってるのでどんどん使え

arr = [{'key' => 'val1'}, {'key' => 'val2'}, {'key' => 'val3'}]
arr.each do |h|
p h['key']
end

337 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:27:42 ]
>>336
それって全部同じ 'key' でも何か意味があるの?
keyは色々なものでってこと?

338 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 18:54:14 ]
結局、Encoding関連で今まで出た案をまとめると

1. RUBY_VERSIONで分岐
2. defined?(::Encoding)
3. str.respond_to?(:force_encoding)

あたりが現実的な解か

339 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:03:11 ]
>>336みたいなのは
{'title' => 'タイトル', 'author' =>'著者', 'date' => '日付'}
という固定フォーマットのハッシュを、何らかの理由で順番を保持したまま
深く考えずに適当に処理したいというときに時々見る

340 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:30:24 ]
data = {
1 => {'title' => 'タイトル1', 'author' =>'著者1', 'date' => '日付1'},
2 => {'title' => 'タイトル2', 'author' =>'著者2', 'date' => '日付2'},
3 => {'title' => 'タイトル3', 'author' =>'著者3', 'date' => '日付3'}}

0.upto(data.keys.size).each do |i|
p data[i]['title']
end

イエス超解決
data を作るときにキーのためにわざわざ整数をカウントしないといけないのが不便

341 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:40:37 ]
dataは配列でいいんじゃないか?

342 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:42:22 ]
railsのソースコード読むとハッシュの上手な使い方が理解できるよネー

343 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 21:48:45 ]
>>341
敢えて全部ハッシュにするという例なんじゃないのか

344 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:25:41 ]
>>339
つまり1.9なら不要の発想ってことでおk?

345 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:32:52 ]
1.9.1 (以降)でしか使わないスクリプトであるなら、ハッシュ入り配列は不要だな
普通にハッシュを each で回せばいい

個人的には Hash の順番保持は 1.9.3 くらいで唐突に無くなりそうな機能だと思ってて
これに依存したスクリプトはあまり作りたくないなあと思ってるんだが



346 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:39:09 ]
え!Hashの順番保持されるようになったのか

347 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:46:43 ]
えー 1.9.1 でめちゃくちゃ話題になったじゃん

$ irb1.9
irb> h = {2 => 'two', 3 => 'three', 1 => 'one'}
irb> h.each_pair{|k, v| puts "#{k} => #{v}"}
2 => two
3 => three
1 => one

$ irb
irb> h = {2 => 'two', 3 => 'three', 1 => 'one'}
irb> h.each_pair{|k, v| puts "#{k} => #{v}"}
1 => one
2 => two
3 => three


348 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:51:52 ]
どちらかというとネガティブな方向で話題になった気がする
順番記憶したら Hash じゃねえとか Rubyオワタ\(^o^)/ とか

349 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 22:57:26 ]
確かにHashはあるキーに対応する値を保持するだけのものな気がするな
順番保持したいなら配列にしろ・・・・・
とこんな話もすでにさんざんしたわけか

350 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:13:16 ]
Java風に言うなら単なるLinkedHashMapでしょ
単なるハッシュとして使う分にはそれでもいいし、
追加コストは定数だからRuby的には許容範囲だとの判断があったのだろう

351 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:16:02 ]
標準でOrderedHashクラス作って、Hashの仕様が変更されてもOrderedHashだったら大丈夫って風にしないと
まったく意味ないんじゃないの?

352 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:16:16 ]
ruby をスクリプトエンジンとして使用するフリーソフトを作ったんですが、
Artisticライセンスな windows 版 ruby ってありますか?

353 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:38:34 ]
yugui氏が担当している間は大丈夫そうなイメージがある、なんとなく

最悪OrderedHash < Hashになったとしても
互換性が必要な場面でHash = OrderedHashとかしときゃいいんじゃねw

冗談はともかく、現時点であらかじめこうしてから利用するとか
class OrderedHash < Hash; end
順列が必要な連想配列だというのが明確になるし
obsoになったときの対応も比較的容易なはず

まあ俺はArrayクラスがArrayとQueueとStackに七変化するようなもんだと思うから抵抗はないし
消える心配も今のところしてない

354 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:42:41 ]
Hashでも順番持ってた方が普通に便利なんだが
別に深刻な害があるわけでなし、何が不満なんだがさっぱりわからん

355 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:49:15 ]
>>354
・性能落ちるかもしれない不安
・今後消えるかもしれない不安

だと思う



356 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 00:52:52 ]
言語処理系としてのruby1.9独自仕様なのか、
それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは
もし前者だとしたら、処理系依存には抵抗がある

ハチドリ本いわく
>Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。
う〜ん・・・・・

357 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:19:10 ]
>>355
性能というのが速度のことであれば逆に速くなった。
というか、だからこそ入った。


358 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 01:22:27 ]
確かに列挙は早そうだな

359 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:14:22 ]
実装依存じゃOrderedHashのつもりで使うのは御法度か

360 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:16:02 ]
rubyの開発グループは本当に人材酷いな。Railsに全部任せちゃえよ

361 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 02:36:06 ]
いやいやRailsの人たちに任せたら新機能と非互換がTINYごとにどんどん増えるよ。

362 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 04:38:27 ]
>>360
お前Rails使ってないか、あるいは使い始めたの今月だろ

363 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 05:31:14 ]
来月には後悔するのか、流動性速すぎだろRails

364 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 07:24:58 ]
Railsは、こっち推奨になりました→やっぱやめました→ごめん、やっぱこれ
とかバージョンアップのたびにあったりして笑うw
いや、使っている方としてはどっちだよ!とか思うけど

365 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:11:13 ]
前田さんたちに頑張ってもらって、言語仕様で明文化してもらうまでは
Hashのキー順序については昔ながらの意識でいることにする。




366 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:28:47 ]
JISの話なら、1.8ベースだから順序の保証は入らんと思うぞ

367 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 11:37:01 ]
>>338
>>328のmethod_defined?も。

>>329
ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。

368 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:22:53 ]
defined? や responsed_to? はダックタイピング用の機能であって
モジュール存在判定に使うもんではないと思う

369 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:48:38 ]
むしろモジュールの存在を問わず
メッセージに応答できるか否かだけを問うべきでは?

370 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:54:42 ]
実際に必要なのは処理結果であって返事そのものではないというのが理想と現実の深くて暗い谷間

371 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:01:47 ]
>>368
ダックタイピングならそんな判定はしない


372 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:04:48 ]
ていうかさあ、responed_to? 使ってる奴だって
その名前のメソッドを持っていることを期待してるのではなく
「Ruby 1.9 の」 force_encoding であることを期待しているんだろ
じゃあそれの条件をきちんと書けよ

373 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:08:05 ]
>>372
期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる

374 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:26:09 ]
if str.respond_to?(:force_encoding) && defined?(::Encoding::ASCII_8BIT) &&
str.respond_to?(:encode) && str.respond_to?(:encoding) &&
defined?(::Encoding::UTF_8) && str.class.new.encode(::Encoding::UTF_8).encoding == ::Encoding::UTF_8 &&
(_ = str.class.new.encode(::Encoding::UTF_8).force_encoding(::Encoding::ASCII_8BIT); _.encoding == ::Encoding::ASCII_8BIT) then
str.force_encoding(::Encoding::ASCII_8BIT)
end

375 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 20:35:44 ]
プログラムが止まったあと>>373がどう改修するのかにちょっと興味がある

どうせ基本雑談なので次の質問の方気後れせずにどうぞ



376 名前:デフォルトの名無しさん [2009/09/27(日) 00:35:12 ]
blog.livedoor.jp/dankogai/archives/51183588.html
上のページに掲載されているjavascriptを使って、ブラウザ上で文字列にRaw Deflateにかけた上で Base64 encodeしたデータをサーバへ送信し、
サーバ側ではrubyでBase 64 decode、標準のzlibライブラリを用いてRaw Inflateしたいのですが、
「Zlib::DataError: incorrect header check」が発生しうまく圧縮データを伸張できません。

サーバ側のrubyは以下のようなコードです。
#!/usr/bin/ruby
require 'zlib'
data = "(javascriptで生成した圧縮データ)"
p Zlib::Inflate.inflate(data.unpack('m')[0])

ちなみに、perlだと同じように標準的なライブラリを使って以下のようなコードで圧縮データを伸張できましたので、このjavascriptのコードが特殊なことをやっているというわけではないのかな?と思います。
#!/usr/bin/perl
use IO::Uncompress::RawInflate ':all';
use MIME::Base64;
$data = "(javascriptで生成した圧縮データ)";
$decoded = decode_base64($data);
rawinflate(\$decoded => \$inflated);
print $inflated;

このJavascriptライブラリ特有の問題なのか、rubyの問題なのか切り分けができておらず微妙かと思ったのですが、
perlで動いたので一度ruby界隈で聞いてみようと思い書き込みしています。
何か分かりましたらご教授いただけないでしょうか。

377 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 00:49:00 ]
unpackが怪しい気がするから、Base64デコードしたデータのハッシュを、Perlのやつと比べてみたらどうかな?
あと、詳しくないんだけど、そもそもRawDeflateと普通のDeflateって同じものじゃないとか?

378 名前:デフォルトの名無しさん [2009/09/27(日) 01:20:21 ]
>>377
まさかと思って調べたところ、RawDeflateと普通のDeflateが違うものでした。
考えが及びませんで、ありがとうございました。
RawDeflateにchecksumなんかが頭についたものがDeflateのようで、以下のようにしたら動きました。
p Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(data.unpack('m')[0])

379 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:45:29 ]
配列の中にハッシュ入れたんですけど
a = [0, {1 >= 5}, 3]
これの配列データがFixnumかハッシュかどうかで処理を分けたいんですが
is_a?(Fixnum)で分岐させようとしたらエラーが出ました
classで調べたらエラーが出ます
どうすればいいんでしょうか?

380 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:56:08 ]
{1 >= 5} でエラーという落ちじゃないだろうな
ちょっとコードをはってみろ


381 名前:379 mailto:sage [2009/09/27(日) 04:07:10 ]
class hogehoge
def mastery_open_flag
MASTERY_ARRAY::HASH_DATA[1].each{|i|
open_flag = true
if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum)
MASTERY_ARRAY::HASH_DATA[1][i].each{|index, level|
unless @actor.mastery_level_data[index] >= level
open_flag = false
end
}
if open_flag
@actor.mastery_open_data[i] = true
end
end
}
end
end

エラーはTypeErrorで
cannot convert Hash into Integerと出ます

382 名前:379 mailto:sage [2009/09/27(日) 04:08:30 ]
module MASTERY_ARRAY
HASH_DATA[1] = [
0, 0, {0 => 5, 1 => 3}, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]
end
モジュールの配列です。

383 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:19:58 ]
どの行でそんなエラー出てるんだい

384 名前:379 mailto:sage [2009/09/27(日) 04:28:48 ]
if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum)
ここです
配列のインデックス2のハッシュ読もうとしたら出ます

385 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:35:08 ]
mastery_open_flag の MASTERY_ARRAY::HASH_DATA[1].each{|i| ... } の i に hash が
きてるからだろう。
i = {0 => 5, 1 => 3}
if MASTERY_ARRAY::HASH_DATA[1][i].is_a?(Fixnum)
状態で配列のインデックスにハッシュをブチ込んで、
整数に変換できないよエラーになってる。eachの i にインデックスが入ると勘違いしてない?



386 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:38:30 ]
www.ruby-lang.org/ja/man/html/Array.html の each と each_index をよく読むといい
って、eachの例がeach_indexの結果と区別つきにくいね…1,2,3じゃない例つかえばいいのに


387 名前:379 mailto:sage [2009/09/27(日) 04:40:24 ]
あーそういうことですか
インデックス入らないと困るんですが
何かうまい書き方ありますか?
とりあえず考えてみます
あったらお願いします
ありがとうございました

388 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:47:09 ]
each {|要素| ... }
each_index {|インデックス| ... }
each_with_index {|要素, インデックス| ...}


389 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 04:49:28 ]
用件は「要素が整数であること」なんだろうか
「要素がハッシュであること」なんじゃなかろうか

MASTERY_ARRAY::HASH_DATA[1].each{|e|
open_flag = true
if e.kind_of?(Hash)
e.each_pair{|index, level|
open_flag = false unless @actor.mastery_level_data[index] >= level
}
end
@actor.mastery_open_data[e] = true if open_flag
end

390 名前:379 mailto:sage [2009/09/27(日) 04:58:13 ]
おーすごいさすがプログラム板
each_indexで動きましたありがとうございます
389さんが書いたとおり「要素がハッシュであること」が評価の大筋です
kind_of?(Hash) これは知りませんでした
なんとかいけそうですありがとうございました


391 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 05:02:31 ]
>>389
@actor.mastery_open_data[e] = true の e は each_with_index の i だと思う
要はナントカデータは全部要素数 100の配列なんだろう
マス目みたいに決まっててアクセス手段がインデックスしかないんだ

MASTERY_ARRAY::HASH_DATA[1].each_with_index{|e, i|
open_flag = true
e.each_pair{|index, level|
open_flag = false unless @actor.mastery_level_data[index] >= level
} if e.kind_of?(Hash)
@actor.mastery_open_data[i] = true if open_flag
}

392 名前:デフォルトの名無しさん [2009/09/27(日) 13:24:58 ]
Win32で一文字入力してすぐ制御を返すサンプルないですか?

393 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:44:36 ]
Curses.getch は?

394 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:44:37 ]
ありがとう。
Winにもcursesってあるのか。

395 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 18:53:34 ]
>>394
普通に導入可能だよー



396 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:22:24 ]
rubyでCGIの勉強しようとおもって
lighttpdをインストールしました。

ところが、設定方法がわからず、htmlは表示出来るのですが
cgiが動きません。涙目状態です。あちこちググりました・・・
途方にくれています・・・

397 名前:デフォルトの名無しさん [2009/09/27(日) 21:25:08 ]
mongrelをいれるといいよ

398 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:26:57 ]
力になっちゃあげたいけど、スレ違いかな・・・
WebProg板か、どっかにLighttpdのスレがあるから、そこで質問したらいいよ

399 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:28:09 ]
SocketってライブラリがあるからそれでWebサーバ書くのがいいと思うな

というか環境や参考にしたページをどこまで試してどこで詰まったとか
そういうのも無しに答えられるわけないので

400 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:30:33 ]
それが無いこと自体が答だろ
つまり、サーバ立てる知識が無い

401 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:32:26 ]
>>398
lighttpdのスレは先に見ました。最終書き込みが8月、その前が6月くらいと
人の気配が感じられませんでした・・・

402 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:43 ]
どう転んでもWebサーバの挙動の知識は必要になるわけなんだし
普通にゼロから勉強したほうが早いんだけどね

403 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:36:52 ]
Linuxなら各ディストリの初心者スレにいけば、誰かが教えてくれそう。

404 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:40:14 ]
>>402
まったくだぬ

「WebサーバやHTTPはお着せとコピペで済ませて本題のRubyの学習をしよう」というのは
CGI関連に限ってはありえん

405 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:44:58 ]
>>404
翻訳しながら、lighttpdの本家のページ見てみます。
mongrelも検討してみます。

apacheの設定よりは、ずいぶん楽そうに見えたんですが。。



406 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:47:26 ]
中途半端にマイナーなサーバソフトウェアだと情報が全くないということはばしばしある
めっちゃメジャーなのを小規模で使うのが結局マシだったりすることは意外と多い

407 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 21:50:40 ]
自分用WebサーバはApacheを接続数とか1人用に絞って使うのが一番だという結論になった

408 名前:デフォルトの名無しさん [2009/09/27(日) 21:50:52 ]
>>396はどう動かないか書いていないから誰も助けようがないよ。
cgiがどう動かないのさ。スクリプトを貼ったりしろよ。

409 名前:デフォルトの名無しさん [2009/09/27(日) 22:02:07 ]
Apacheの方が情報多いのに。

410 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:03:40 ]
>>408
/var/wwwがドキュメントルートディレクトリで、ここに1.html
/usr/lib/cgi-binがcgiディレクトリに、1.cgi

1.htmlで、action=/usr/lib/cgi-bin/1.cgiと記述。

ブラウザで、localhost/1.htmlを表示。ボタンを押すと
404 not foundとなります。

lighttpd.confでのcgiディレクトリ指定が間違ってるんかなぁと・・




411 名前:デフォルトの名無しさん [2009/09/27(日) 22:13:48 ]
ログをまずは見ようぜ。
1.cgiに実行権限がついているかとか1.htmlの読み込み権限とかもチェックしような

412 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:15:53 ]
action=/usr/lib/cgi-bin/1.cgi っておかしいだろ… lighttpd とかにかかわらず
/usr/lib とか公開するとは考えにくいから action=/cgi-bin/1.cgi とかなんじゃないのか
この調子じゃ権限とかもだめそうだな

413 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:31:01 ]
>>396
RubyでCGIの勉強をするなら、lighttpdから始めるのはオススメしない
cgi.rbを使って、WEBrick上 or Apache上で動かしてみるとか
Sinatra使うとかしたほうがいい

414 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:40:09 ]
>>411
chmod 755はしてあります。

>>412
あ、cgi-binでいいんですね。フルパスにしちゃいました。
たしかに公開しないですもんね。

415 名前:デフォルトの名無しさん [2009/09/27(日) 22:52:59 ]
ファイルの所有者も確認しような
lighttpdを起動したユーザがownerだよな?



416 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 22:55:57 ]
式がnil, false, 0なら偽になるif文てないの?

417 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:06:09 ]
>>415
ファイルオーナーが、「root」ですね
lighttpdは、「www-data」が起動してます

sudo cpでファイルを/usr/lib/cgi-binにコピーすると
所有者が、ルートになってしまいます。

ちょっと、apacheや他のを調べてみます。みなさん、スレ違いに付き合って
くださって申し訳ありがとうございまsyた

418 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:18:45 ]
>>416
!x || x== 0

'' や [] や {} も偽にしたいならActiveSupport入れてblank? と present?
を使え。



419 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:23:03 ]
>>418
それだとnil, false, 0で真になるんだけど。偽がほしいんですが無理なんですか?

420 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:29:26 ]
x && x != 0
どんだけ応用力ないのかな…

421 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 23:33:29 ]
いかにも落とし穴がありそうだと漏れのアンテナが反応しております

422 名前:418 mailto:sage [2009/09/27(日) 23:35:35 ]
すまん逆転させるのわすれてた。てへ。



423 名前:デフォルトの名無しさん [2009/09/27(日) 23:49:22 ]
>>417
ファイルの権限を777にして実行してみな。
それで実行できれば権限関係の設定がおかしかったってことだ
linuxの基礎を勉強私的な。

424 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 10:48:55 ]
Digest::MD5.digest の値を hexdigest に変換する計算式を教えてください。

convert(Digest::MD5.digest(value)) == Digest::MD5.hexdigest(value)

となるようなconvert()です。
あるいはヒントでもいいのでお願いします。


425 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 10:59:18 ]
そのへんはさすがにマニュアルにも書いてあるだろ
> 与えられた文字列に対するハッシュ値を、ASCIIコードを使って 16進数の列を示す文字列にエンコードして返す。

ということで
irb> p Digest::MD5.digest('12345')
"\202|\313\016\352\212plL4\241h\221\370N{"
irb> p Digest::MD5.hexdigest('12345')
"827ccb0eea8a706c4c34a16891f84e7b"
irb> p Digest::MD5.digest('12345').unpack("H*")[0]
"827ccb0eea8a706c4c34a16891f84e7b"




426 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 11:12:25 ]
>>425
ありがとうございます。
1バイトずつ16進数に変換するということなので、こう理解しました。

irb> Digest::MD5.hexdigest('foo')
=> "acbd18db4cc2f85cedef654fccc4a4d8"
irb> Digest::MD5.digest('foo')
=> "¥254¥275¥030¥333L¥302¥370¥¥¥355¥357eO¥314¥304¥244¥330"
irb> Digest::MD5.digest('foo').unpack('C*') # 1バイトずつに分解
=> [172, 189, 24, 219, 76, 194, 248, 92, 237, 239, 101, 79, 204, 196, 164, 216]
irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c } # 16進数に変換
=> ["ac", "bd", "18", "db", "4c", "c2", "f8", "5c", "ed", "ef", "65", "4f", "cc", "c4", "a4", "d8"]
irb> Digest::MD5.digest('foo').unpack('C*').collect{|c| '%x' % c }.join == Digest::MD5.hexdigest('foo')
=> true

なるほどー。
どうもでした。


427 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:26:36 ]
Dir.foreach('hoge'){|filename|
filename.match(/(aaa)(bbb)/}
print $1
}

この状況で、$1や$2の情報を配列に入れるにはどうすればいいですか?
具体的にはこの後、$1の内容について一つ一つ処理をしていきたいんです。

428 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:39:11 ]
ary = []
Dir.foreach('hoge'){|filename|
filename.match(/(aaa)(bbb)/}
ary << [$1, $2] # もしくは ary << $1 << $2
}
p ary

429 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:47:13 ]
filename.scan(/(aaa)(bbb)/)

430 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:51:17 ]
>>428
「<<」ってこういうところで使うんですね。
勉強になりました。ありがとうございました!


431 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 00:50:52 ]
rubyを使ってgnuplotで簡単にグラフを書きたいんだけど、
何かお勧めありますか?

432 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 08:15:40 ]
h = YAML.load_file(path)
@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id']
@password ||= h[:pass]||h[:password]||h['pass']||h['password']

イライラ

433 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 12:52:20 ]
エディタから編集中のRubyのスクリプトを独立したウィンドウ、ターミナルで起動したい
エラーがあったらエディタがそれを取り込んでタグジャンプしたい
teeやら別のモジュールをrequireするのはなるべく避けたい
もちろんユーザーはputs/getsを制約なく使いたい

といううまいやり方ってないですか?
ようするにエラーが出たらそれだけをログファイルに書き込んでrubyは終了コード1を返したいです
標準エラーをファイルに書き込むようなファイルをこっそり-rするのが現実的なんですかね

434 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 13:06:42 ]
>>433
Emacs使え

435 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 13:10:50 ]
標準の ruby-mode で M-x run-ruby で Emacs 内に irb 開いて
M-x ruby-load-file → Enter すれば irb でファイルが実行されるな

エラー行ジャンプはどうしようか



436 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 14:56:39 ]
>>432
>h = YAML.load_file(path)
>@username ||= h[:user]||h[:username]||h[:id]||h['user']||h['username']||h['id']
>@password ||= h[:pass]||h[:password]||h['pass']||h['password']

YAML使ってるなら、キーは文字列になるだろうから、Symbolは考えなくていいんじゃないかな。
YAMLでわざわざSymbolをキーに使うとは考えにくい。

@username ||= h['user'] || h['username'] || h['id']


437 名前:デフォルトの名無しさん [2009/09/29(火) 19:21:13 ]
1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って
バージョンアップしようと計画していますが、どちらがお勧めでしょうか?

TwitterもRubyからScalaへ書き換えたりしていますので...

438 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:28:02 ]
問題ないならPHPのままにしておく

439 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 19:33:59 ]
scalaって日本でも実績あるの?

440 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:17:30 ]
1万PVって何かを説明してるように見えて、実際はまったく説明してないよなあ。
開設以来10年で1万PVなのか、毎秒1万PVなのか。

441 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:21:10 ]
>>434-435
特定のエディタの話はしてないんだけど…

442 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:22:53 ]
一応、単位としては1日か1ヶ月かのどっちかだな
1日1万PVならコンテンツによってはまあ普通
1ヶ月1万PVなら内容によっては閉鎖したほうがエコ
どっちにしてもPHPで動いてるならPHPで増強したほうがきっと楽だ

443 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:24:12 ]
>>441
だからEmacs使えって
どうせ使いもしないで脳内で考えてるんだろ

444 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:28:12 ]
エディタの布教は余所でやれ。

445 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:32:33 ]
求めること全部できるんだから仕方あんめえ
エディタとして動作するものではEmacs以外ではgvimかPeggyくらいしか心当たりがない
どう動作するのが効率いいかの研究もEmacsの動作見れば丸分かりだ



446 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:35:49 ]
特定のエディタじゃなくて何を求めてるんだ
どんなエディタでも連携して動く万能スクリプトが欲しいのか

447 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:38:44 ]
>>446
たぶんそうだと思う
エディタ内でシェルを起動するのでなければ
emacsclient みたいなシステムがないと無理だと思うんだけどね

というか、できないからこそ数十年かけて Emacs が M-x compile を進化させてきたのではないんかのう

448 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:43:52 ]
うん、Emacsのとか使ってれば「Rubyは特に関係ない」ということにすぐ気づけたはずなのに
コンパイラ等が異常終了コードをシェルに返してエラー行を標準出力などに表示さえしてくれれば用は済む

449 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:45:04 ]
$stderr.reopen($0 + ".errorlog")


450 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 20:54:21 ]
>>442
単純にPVって言ったら普通に日単位だろ
何この馬鹿

451 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:38:21 ]
>>437
>1万PVのPHPで作られたサイトをRuby(ROR)かScala(Lift)どちらかを使って
>バージョンアップしようと計画していますが、どちらがお勧めでしょうか?

どういう理由でバージョンアップしようとしているのかがわからないので、答えられる人はいないでしょう。
パフォーマンスが理由ならRoRはイバラの道だし、開発効率が理由ならLiftはイバラの道。
どちらの道を選んでもイバラの道だと思うので、PHPのまま改善することをお勧めします。
あるいはPythonを使ってGoogleAppEngineにするとか。これもイバラだな。


452 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:47:46 ]
railsは慣れてしまえば今までの開発が馬鹿に思えるぐらい楽になる

453 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 23:49:40 ]
日に1万PV程度なら、サーバ丸1台あればRoRでも余裕だよ。
下手するとキャッシュなしでもいけるくらい。

454 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 00:35:22 ]
そりゃ1日8万秒以上あるんだから言われなくても分かる

455 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:13:47 ]
結局ピーク性能が足りるかどうかだよな。



456 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 08:24:47 ]
そして既存のPHP+サーバではおそらく足りてるわけであって、
現時点で言えることは「じゃあPHPでやっとけ」にしかならんという

457 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 10:56:30 ]
でも結局ピーク性能が足りるかどうかだよ。

458 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:42:46 ]
おいちょっと待てよ、ピーク性能が足りてるかどうかが問題だろ

459 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:46:40 ]
WebProg板に帰れ

460 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:24:24 ]
1ヵ月1万PVwww

461 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:57:50 ]
いや、ここはピーク性能が足りるかどうかが肝だろ。

462 名前:デフォルトの名無しさん [2009/09/30(水) 18:46:43 ]
全角の数字を半角にしようと下記のフィルタつくったんだけど
変換されないで、元の値が戻ってくる。
何が間違ってるか教えてください。
使う文字コードはUTF-8です。

#全角数字を半角数字に変換するフィルタ
def zen_to_han_int(str)
    outstr = str.gsub(/0/,"0")
    outstr.gsub!(/1/,"1")
    outstr.gsub!(/2/,"2")
    outstr.gsub!(/3/,"3")
    outstr.gsub!(/4/,"4")
    outstr.gsub!(/5/,"5")
    outstr.gsub!(/6/,"6")
    outstr.gsub!(/7/,"7")
    outstr.gsub!(/8/,"8")
    outstr.gsub!(/9/,"9")
    return outstr
end


463 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:52:32 ]
>>462
str とスクリプトファイルの文字コードが合ってない
ごく一般的には str とスクリプトの正規表現リテラルの文字コードは同一にする

…あーつまりスクリプトのファイルが UTF-8 じゃないか str が UTF-8 じゃないか
あるいは ruby -Ku のような実行指定をしてないかどれか

464 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:53:19 ]
今はじめて気がついたけどメイリオって数字が全角と半角全く同じに見える。きめぇw

465 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 18:54:43 ]
def zen_to_han_int(str)
p "yes!" if /0/ =~ str
end

これで 0 を含む文字列渡したときに "yes!" と表示されなければ>>463



466 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:10:23 ]
むしろ、メイリオになってから、半角全角混同さんが気にならなくなりました ^p^

467 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:12:28 ]
やっとWindowsに標準添付された真の意味での表示用のフォントだからな
表示されるぶんには全角半角の区別がある意味は何もないわけで

つまり区別が必要な人は使ったら駄目よ

468 名前:デフォルトの名無しさん [2009/09/30(水) 20:25:22 ]
>>463-465
見直したら、スクリプトがS-JISでかかれてました。
$JCODE = "UTF-8"
ってやってもだめなのね

もうひとつ、お願いします。

#数字に変換できるか
def intrger_string?(str)
    begin
        Integer(str)
        return true
    rescue ArgumentError
        return false
    end
end

Rubyレシピブックのまるぱくりなのですが
3桁の先頭に0を含む文字列を渡すとfalseになる場合があります。
例えば078から099までのあいだとか
これも原因が良くわかりません。
どなたか教えてください。

469 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:30:25 ]
>>468
8進数

470 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:30:28 ]
該当メソッドのマニュアルくらい読め
ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#Integer
マニュアル読んだ上でここがわからんとかそういう質問してくれ
どうせマニュアル読んで調べてる時間のほうが長いんだから、マニュアルの見方を勉強したほうが結局は得だ

471 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:18:02 ]
>>468
$JCODEってなんやねん

472 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:21:37 ]
>>468
0x1234 とかも渡してみろ。

473 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:47:46 ]
>>468
正規表現じゃだめなん?

del integer_string?(str)
 return str =~ /¥A¥d+¥z/
end

474 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:25:26 ]
>>469-470
お恥ずかしいです
下記のように書き直しました

def intrger_string?(str)
    if str.gsub(/\d/,"").size == 0 then
        return true
    else
        return false
    end
end

>>471
$KCODEの間違えです(´Д⊂

475 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:32:57 ]
>>473
それだと2/8/16進表記に対応してないから>>468とは別物になるぞ



476 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:56:18 ]
>>474

メソッド本体だが、ifの条件式が
成立したら(=false, nil以外を返ったら)true
成立しなかったら(=falseかnilが返ったら)false
を返すだけなので、その条件判定式だけでruby的には十分。

ところで str == '' のときはtrue/falseどっちになって欲しいのだろう?


477 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 08:49:38 ]
>>475
十進だけにしたいんだろ
/\A\d+\z/ =~ str が最善だと思う

478 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 11:28:02 ]
hoge= メソッドと hoge メソッドって、どっちが先に定義されてると自然?
reader があってから wiriter があるとわかりやすいよね?

479 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 14:25:42 ]
attr_reader :hoge
def hoge=(value)

でやるのが俺の定番
でも両方書くなら書きやすさ的にライタ側から書くかなあ

480 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:38:52 ]
ここの真ん中辺のコードなんですが
ttp://www.aoky.net/articles/why_poignant_guide_to_ruby/chapter-4.html

wordlist.rb
code_words = {
'スターモンキー' => '新帝国の神経質な閣僚のフィルとピート',
'カタパルト' => 'chuckyゴーゴー', '火炎瓶' => '暖房つきのリビング',
'ナイジェリア' => "Ny and Jerry'sドライクリーニング(ドーナッツ付き)",
'とどめをさす' => 'コンセントをさす'
}

require 'wordlist'

# 邪悪なアイデアを取ってコードワードと入れ替える
print "新しいアイデアを入力してください: "
idea = gets
code_words.each do |real, code|
idea.gsub!( real, code )
end

メソッドdoのブロック引数で、real, codeの二つが出てきます。
これはなんですか?意味がわからないです。。。

コピペで、rbファイルを2つ作って、下のコードをruby hoge.rbとして実行しても
想定通り動きませんし・・・

481 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:53:16 ]
>>480
こゆこと
これなんぞと思ったら出力して中身を見れ

code_words.each do |key, value|
puts "#{key} -> #{value}"
end

ナイジェリア -> Ny and Jerry'sドライクリーニング(ドーナッツ付き)
カタパルト -> chuckyゴーゴー
スターモンキー -> 新帝国の神経質な閣僚のフィルとピート
火炎瓶 -> 暖房つきのリビング
とどめをさす -> コンセントをさす

482 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:54:10 ]
だからそういう文法というか基本クラスのメソッドの使い方っぽいのは
マニュアルを一応眺めてから「ここの部分がさっぱりわからんおまえら親切に教えろ」とか言ってくれ
親切かどうかはともかくおおむね解説なりツッコミなりが入るからさ
ttp://www.ruby-lang.org/ja/man/html/Hash.html#each
> key と value を引数としてブロックを評価します。 self を返します。
{:a=>1, :b=>2}.each_pair {|k, v| p [k, v]}

# => [:a, 1]
   [:b, 2]



483 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:54:20 ]
doはメソッドではない。ではdoでなければメソッドは何でしょう?

484 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 16:59:00 ]
>>482
それはマニュアルを読むだけの力があるのに
手抜きして読まない人向けのお言葉

485 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:00:29 ]
>>483
do はブロック開始の(予約)文字列
メソッドに引数を渡すときの ( と ) それそのものがメソッドではないのとおおむね同じ理屈
文字列だからたまたま読めるだけで、別に <<<<<< >>>>>> でもよかった



486 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:06:57 ]
>>481
eachメソッドがハッシュに対して使われたときは、その引数は
|key,value|という形になるわけですね。

>>482
申し訳ないです。

>>483
481の結果からすると、each(すべての要素にたいして)do以下を行えという
ことだと思いますが、メソッドでないならdoはなんだろう。

487 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:14:30 ]
>>481
実行してみました。
undefined local variable or method `code_words' for main:Object (NameError)
というエラーが出ました。code_wordsが定義されていない?

488 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:20:19 ]
初心者が最初にwhyの感動的rubyガイドで勉強するのは
不適切だったりしますか?

489 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:44:46 ]
>>488
こっちのが無難
www1.tf.chiba-u.jp/~shin/tutorial/index.rb

490 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 17:56:55 ]
>>486
だから、doは予約語だってば。
ifがメソッドでないのと同じ。

491 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:12:37 ]
> >>483
> 481の結果からすると、each(すべての要素にたいして)do以下を行えという
> ことだと思いますが、メソッドでないならdoはなんだろう。

そのeachはなんですか?
すべての要素にたいして、というおまじないか何かですか?

プログラミング言語はそういうふわふわとしたものではないです。

492 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:21:35 ]
おまいら、ここは初心者スレだ。
初心者っつーのはとんでもない思い込みや勘違いをしていることも多いんだから
あたたかい目でみてください。

>>486
>メソッドでないならdoはなんだろう。

すでに指摘があるように、doは構文を表す予約語のひとつです。
while i < 10 do
 print i
end
では、whileやdoやendが予約語です。なおこの場合ならdoは省略可能。

[1, 2, 3].each do |x| puts x end
なら、each や puts はメソッド名、do と end は構文を表す予約語。

493 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:39:54 ]
do が何だかわかりませんレベルの人には来て欲しくないな
質問するなら最低限、言語の基礎は身に付けておいて欲しい
これくらいは自力で学習、調査しておくのが質問する側のマナーだろう

494 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:42:28 ]
そもそも、動作としては arr.each(ブロック) なんだよ
オブジェクト arr の インスタンスメソッド each に引数でブロックを与えている
ただ、便利なブロックがこのままだとたいそう使いにくいので

[1,2,3].each(do |e| p e endのブロック、ただし実行できるならこのブロックを要素ごとに実行すること)

といちいちテクニカルにする代わりに

[1,2,3].each do |e|
p e
end

と平易に書くように Ruby を作ったのだ
このへんの動作が気になるなら

my_block = lambda do |e|
p e
end
[1,2,3].each(&my_block)

とでも書いてみるといい

495 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 18:58:26 ]
>>493
思考過程の筋が見えるなら特に問題はないと思われ
まあ、つまりは「勝手に省略せず詳しく書け」ということでしかないわけだが
若干のエスパー能力が要るから万人には勧められない



496 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 19:29:15 ]
理解としては>>486でまったく問題ないのになんでこんなことになってるんだ

497 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 20:58:03 ]
申し訳ありません。whyのrubyガイドが
最初の方は、とてもわかりやすかったのです。

読み進めていると、コードが出てきて、ruby ファイル.rbと実行しても
エラーが出たりするようになり、僕はアホなのだろうかと思って質問しました。

初心者向けとして適当でないようなので、もうすこし文法を押さえながら
読んでみようと思います。ありがとうございました。

498 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:29:17 ]
>>493
>do が何だかわかりませんレベルの人には来て欲しくないな

おまえは>>1を声に出して10回よめ。
この程度が我慢できないやつはこのスレくるな。

499 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:41:55 ]
でも>>493程度が我慢できない人は2chに来るべきじゃないよね。

500 名前:デフォルトの名無しさん mailto:sage [2009/10/01(木) 23:45:19 ]
せめてネタ系のスレで頑張ってもらえるとありがたいんだけど
そうもいかないんだろうね

501 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 00:48:12 ]
rubyに限らず初心者スレッドは全てを受け入れる糞溜だと思ってる

502 名前:デフォルトの名無しさん [2009/10/02(金) 05:22:34 ]
日本語の文字抽出でうまい方法が分からず困っています。

抽出元のサンプルは下記の通り
11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69
上記サンプルのうち、「この、文字列を抽出したいんdesu.」の部分を抽出したいんです。
抽出対象:日本語、句読点、日本語文字列に付随する半角英数字、半角記号("テスト."等。空白類を挟んだら不要対象とする)
不要対象:半角英数字、半角記号、空白、"○"、"×"等

現在のコードは下記の通り

while line=gets
if /\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*(\W+)\w*\s*\w*\s*/ =~ line
if $1 != " "
print "日本語抽出:", $1, $2, $3,$4,$5,$6,"\n"
end
end
end

実行結果↓
日本語抽出:○ × ::この&カ字列を抽盾オたいん

(続きます)

503 名前:デフォルトの名無しさん [2009/10/02(金) 05:25:20 ]
(続き)

if文の条件が大変なことになっているのは
if /(\W+)/ =~ line
としてしまうと最初の"○ ×"のみ抽出して終わってしまうためです。
プログラムとして力技で美しくないのは分かっています。
また、日本語が文字化けしてしまっています・・・文字コードの問題だろうとソース先頭に#!ruby -Ksを足してみましたが、
空白類の扱いが変わった?のと記号以外の文字類が表示されなくなりました。

抽出部分を綺麗にするにはイテレータで回せば良いかなと思っています。
→一文字ずつチェックしようと思いましたが、String#each_byteが全半角を問題なく捌けるのか問題が・・・

問題をまとめると
1:文字列の中から上記抽出対象のみ抽出したいが、力技で汎用性がないので改善したい
2:文字化けしてしまうが原因、対策が分からない
となります。

OSはWindows XP SP3でRubyのバージョンは1.8.6です。

長文乱文で分かりにくい質問となってしまい申し訳ありませんが、よろしくお願いします。

504 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:32:32 ]
まあrubyはメゾットの様なものが多いのも事実だけどな。
そこらの統一性の無さは、原理追求派よりも教祖信仰派のほうが多いってだけじゃないかと。
メゾットだからこうって寄りも、教祖がこう使う様に教えたから深く考えずに同じ様に使うのほうが、良いruby信者に成れる気がする。

505 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 05:36:40 ]
irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69"
irb> puts s.split[6]
この、文字列を抽出したいんdesu.

空白で区切られた7フィールド目という意味ならこれでいいのでは
フィールド内に半角空白が混じっても構わないという条件だととたんに面倒になるが



506 名前:503 [2009/10/02(金) 06:02:35 ]
>>505
レスありがとうございます。
すみません、確かにサンプルに限定すればそれで解決ですね。

ただ、やりたいのは日本語部分(日本語文字列に付随する記号類、英数字は抽出対象とする)の抽出なのです。
質問の書き方が悪かったのですが、おっしゃる通り、日本語列の中の空白、記号、英数字、
もしくは日本語列の先頭・末尾の半角英数字、記号類は抽出したいんです。
(日本語列と結合していない日本語以外(英数字、記号、空白類)は除外)

507 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:13:51 ]
結合ってなんだ?

508 名前:503 mailto:sage [2009/10/02(金) 06:21:11 ]
>>507
付随と同義です。ややこしくてすみません。
文字列の結ご・・・連結ですね。すみません。

509 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 06:46:02 ]
>>507
おそらく、セパレータとフィールドという概念がないんだと思う
だから、元データを作った人の意図を読むことができないし、説明もできてないから俺らもどうにもできん

たとえば、俺らは>>502を見たときに
「番号、マルバツ、マルバツ、英数字、時分秒、英数字、日本語入り文字列、年月日、時分秒、数字」
という空白で区切られた固定の何らかの意味を持った10項目(または年月日+時分秒の9項目)と読むが、
>>503にとってはおそらくそうではないのだろう
ひょっとしたら例示のために出しためちゃくちゃな文字の集まりなのかもしれない

空白の数には全く意味がなく、
形態素解析のように「空白で区切られた、日本語文字を含む文字の連なり」が欲しいのなら
split.find_all{|e| <eがShift_JISの日本語文字を含むということ> }
とすればよい
Shift_JIS (というかたぶん CP932)の日本語文字を含む条件を表す正確な正規表現はどっかから拾え

irb> s = "11 ○ × abcDefghIjkLmnoPqrsTu 00:00:59 abs この、文字列を抽出したいんdesu. 09/10/02 00:16:55 69"
irb> puts s.split.find_all{|e| /[\xa1-\xdf]|[\x81-\x9f\xe0-\xfc][\x40-\x7e\x80-\xfc]/n =~ e}.delete_if{|e| /\A[○|×|△]\Z/s =~ e}
この、文字列を抽出したいんdesu.


510 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:01:18 ]
>>503
>>509のようにsplitで配列にしてからfind_allでもいいし
文字列に繰り返し正規表現をしたいのならscanてのもある
Array,String,Hash,Enumerableあたりのメソッドは軽くリファレンスに目を通しておくといいよ
へぇこんなのあるんだっていう程度でも使う時に思い出せる

511 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:02:44 ]
-Ksを指定するとShift_jis全角文字も\wでマッチするようになる

512 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:18:29 ]
>>511
「も」では駄目だろ
英数字記号だけの場合はマッチしてはいけない
irb> /\w/ =~ "あういえ".tosjis
nil
irb> $KCODE = 's'
irb> /\w/ =~ "あういえ".tosjis
0
irb> /\w/ =~ "a"
0

全角文字(と場合によっては半角カタカナ)にのみマッチする正規表現か、
英数字記号だけにマッチして全角区域に誤爆しないという正規表現が必要

513 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:32:08 ]
>>512
ああすまん-Ksにして結果が変わった原因ってことで書いただけなんだ

514 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:09:04 ]
ruby って、ライブラリやクラスメソッドの使い方を
覚える言語ってことですか?



515 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:10:33 ]
オブジェクト指向言語は大体そんなもんだ



516 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:26:59 ]
大抵のプログラミング言語において、文法なんて数時間で全部理解し終えるもんだからなあ。
後は当然ライブラリの使いこなしってことになるだろう。

517 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 11:32:04 ]
クラスメソッドよりもインスタンスメソッドのほうが多いよ!
とかそんな話を

別に覚えなくてもいいけど、その場合はライブラリに相当するものを全部自力で作ることになる
どっちか気に入ったほう選んでくれ

518 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:13:39 ]
Windows版のRubyって、OpenSSLも使えるんでしょうか。
知っている人がいたら教えてください。

519 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:22:50 ]
パッケージ次第だった気もするけど、基本的に使える

520 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:24:35 ]
>>518
推奨されてるパッケージでインストールする限りは使えるはず

他の人のWindows版でも絶対に使えるとは限らないのは他のOS版のRubyと同じ

521 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 13:42:25 ]
ありがとうございます。
RSAの仕組みを勉強するのにRubyを使うことにします。

522 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:40:48 ]
rubyでは、値がすべてオブジェクトということは
1という数値や"太陽パクパク"という文字列や、それらを代入した
number,sun_eaterといった変数もオブジェクトということですか?

number = 1
sun_eater = "太陽パクパク"


523 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 14:59:20 ]
>>522
整数とかはさすがに高速処理するように小細工を施してはありますが、
それらも含めオブジェクトは全部クラスのインスタンス(=オブジェクト)です

irb> p 1.class
Integer
irb> p "太陽パクパク".class
String

変数はオブジェクトについたラベルです
ラベル名 → オブジェクトID
というような対応表を Ruby が管理していて、
該当ラベルの変数が呼ばれたときにはその表の対応を参照して該当オブジェクトが使われます
変数というハコが入れ物オブジェクトとして存在するわけではありません

irb> p 1.object_id
3
irb> p "太陽パクパク".object_id
-605838888

524 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:06:21 ]
>>522
>rubyでは、値がすべてオブジェクトということは
>1という数値や"太陽パクパク"という文字列や、それらを代入した
>number,sun_eaterといった変数もオブジェクトということですか?

数値や文字列もオブジェクト。

ただし、「変数」はそれらオブジェクトを格納するもの(あるいはオブジェクトとひもづけるもの)であって、オブジェクトそのものではない。
そのへんは他の言語でも同じ。

525 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:08:38 ]
>>523
変数はオブジェクトじゃなくラベル。
あやうく、間違った認識で通り過ぎるところでした。
ありがとうございます。



526 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:10:25 ]
>>524
他の言語でも同じなんですね。ありがとうございます。

527 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 15:50:19 ]
C++、Perlでは宣言された変数自体がオブジェクトの実体であるケースもあるけどね
と、話をややこしくしてみる

528 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:55:56 ]
他言語がどうであれ、Rubyにおいて変数は箱ではなくラベルなのは間違い無い
沢山あるオブジェクトの中のいくつかに名前を付けるのが変数
1つのオブジェクトに複数の名前があることも珍しくないし
無名のまま役割を終えるオブジェクトも存在する

529 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 17:58:09 ]
だいなみっくえいりあしんぐ

530 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:04:25 ]
2chまとめエディターを作っているのですがどうにもこうにもならなくなってしまったのでヒントをください。
やろうとしていることは
DATの中身をコピペで入力

下ごしらえの置換
アンカー順に並べ替える
チェックボッックスによるdivのclassの追加(文字色を変えたり大きくしたりするため)

ソースを出力
というものです。

ひとまずここまでひとりでつくりました。
tomiya.bne.jp/cgi-bin/upup/src/myg_l2344.zip.html
やっていることは
簡単な置換とレスに1〜1001までの番号をハッシュとして付ける
ことまでです。

教えて欲しいことは
アンカー順に並べ替える方法
 本文をスキャンして「>>○○」を抽出しハッシュのkeyに代入?
チェックしたレスのみ出力する方法
チェックボックスでdivのclassを追加
 <div class="res">を<div class="res aka">や<div class="res aka deka">などに置換?
です、見当がつきそうな方はどうかご教授ください。

531 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:26:40 ]
オブジェクトについて、もうひとつ質問です。
class Gohan
def caree
print "今日のご飯はラーメンだ\n"
end
def natto
print "朝飯は納豆だ\n"
end
end

yuhan = Gohan.new
yuhan.caree

asamesi = Gohan.new
asamesi.natto

この場合、yuhanやasamesiがオブジェクトになるのでしょうか?



532 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:29:10 ]
ARGVで漢字のフォルダ名が展開できず困っています。

英字だと

>ruby -e "p ARGV" hon/*
["hon/新規テキスト ドキュメント.txt"]

となってうまくいきますが、漢字だと

>ruby -e "p ARGV" 本/*
["本/*"]

となってしまい、フォルダ内の新規テキスト ドキュメント.txtが展開されません。
どうすれば展開できるかご教示ください。

OSはWindows XP SP3です。
>ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]

533 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:31:30 ]
Ruby標準のCGIクラスって、どれぐらいの大きさのデータを受け取れるのでしょうかね?
DBの内容をWeb上からバックアップ(DL)したり、復帰させたり(UP)するシステムを考えてるのですが
バックアップするときは、ストリーミングで流せばいいような気がするけど
復帰させるときは、大量のデータが一度メモリに溜め込まれる気がします

たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。
また、なにか回避策が有るのでしたら、教えてください。

534 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:35:45 ]
ワイルドカードの展開ってシェルの役割じゃ・・・?
と思ったらWinではやってくれないのか

535 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:39:19 ]
>>531
>>523




536 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:42:14 ]
>>532
ARGV の処理は環境依存
コマンドプロンプトで

DIR 本/*

とやって、望みの出力が得られなければ ARGV では無理というかコマンドプロンプトの使い方の知識が足りない

537 名前:532 mailto:sage [2009/10/02(金) 18:50:17 ]
>>536

それはうまくいきます。/の代わりに\ですが。

>dir 本\*
ドライブ D のボリューム ラベルは以下略

>ruby -e "p ARGV" hon\*
["hon/新規テキスト ドキュメント.txt"]

英字は/でも\でもok

>ruby -e "p ARGV" 本\*
["本\\*"]

漢字はどっともだめ

538 名前:532 mailto:sage [2009/10/02(金) 18:55:24 ]
書き忘れ

>ruby -e "p ARGV" */*
["hon/新規テキスト ドキュメント.txt", "本/新規テキスト ドキュメント.txt"]


539 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:56:09 ]
>>530
#!/usr/local/bin/ruby -Ks
class Ch2Thread
def initialize(file)
@dat = file
parse
end
attr_reader :data, :title, :size

def [](v); @data[v]; end
def parse
@data = Array.new
arr = @dat.to_a
arr.each_with_index do |res, i|
@data << parse_res(res, i)
end
@title, @size = arr[0].split(/<>/)[-1], @data.size
end
def parse_res(res, resno)
e = res.split(/<>/)
d = e[2].split
return {:no => resno + 1, :name => e[0], :mail => e[1],
:date => "#{d[0]} #{d[1]}", :id => d[2], :be => d[3], :res => e[3]}
end
end

sure = Ch2Thread.new(File.open('./sample.dat').read)
puts "Title => #{sure.title}"
sure[0..3].each do |res|
res.each{|k,v| puts "#{k} => #{v}"}
end

540 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 18:59:22 ]
>>532
WinXP SP2 + ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
だけど展開してくれた。なんなんだろうね

541 名前:540 mailto:sage [2009/10/02(金) 19:02:24 ]
SP3だった・・・

あとコマンドプロンプトから動かしてる?
専用エディタとかから走らせたりしてると挙動が違ってくるかも

542 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:03:55 ]
>>532
ren 本 書
ruby -e "p ARGV" 書/*

1.9のglob周りは多バイト文字に関しては腐ってるね。

543 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:04:15 ]
1.9.1リファレンスより
>標準のシェルがワイルドカードを展開しない環境 (Win32)では、Ruby インタプリタが自前でワイルドカードを展開して Kernel::ARGV に設定します。
らしいからできるはずだと思うけど

うち(Vista コマンドプロンプト)でも
1.8.7 (2008-08-11 patchlevel 72) [i386-mswin32]だと 本\* 本/* どっちも認識してくれるけど
1.9.1p0 (2009-01-30 revision 21907) [i386-mswin32]だとできなくなってるな

544 名前:532 mailto:sage [2009/10/02(金) 19:11:36 ]
ご確認いただきありがとうございます。
うちも1.8.7はokでした。

1.9.1で通る漢字もありました。
>ruby -e "p ARGV" ホン/*
["ホン/新規テキスト ドキュメント.txt"]

>ruby -e "p ARGV" 川/*
["川/新規テキスト ドキュメント.txt"]

>ruby -e "p ARGV" 山/*
["山/新規テキスト ドキュメント.txt"]

545 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:14:53 ]
Ruby Freaks Lounge 第8回 Windows版Ruby 1.9で培う危機回避スキル(前編)
gihyo.jp/dev/serial/01/ruby/0008

Rubyで日本語ファイル名と聞いた瞬間に悪寒がする漏れは正しかった



546 名前:539 mailto:sage [2009/10/02(金) 19:16:56 ]
とりあえずレスの全データを扱いやすい形に整えないと見通し的にどうにもならないような気がしたので、
たとえばこんなクラスを作る
動作は超適当
変数名も適当
レス本文のHTMLタグとかを消したい場合は parse_res のとこで適当に追加してくれ
クラスでなくてもでっかいハッシュや配列を作るのでもいいんだけど面倒だったのでクラスにした

547 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:19:00 ]
日本語とかマジで廃止しろよ
100年前に廃止してくれてれば今頃こんな苦労することも無かった

548 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:23:46 ]
>>547
PC/AT互換機使うのいますぐやめろ
元凶はそれだ
ずっとNECなら日本語処理は完璧だったのだ

549 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:24:14 ]
たいした苦労もしてないくせに

550 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:25:48 ]
悪いのはシフトJISだよ
日本語は悪くないよ
EUCばんざーい

551 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:29:40 ]
もはや現実逃避しかないのか・・・・・・w

552 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:35:07 ]
松江市さんは、rubyのドキュメントをしっかりしたものに
してください。

553 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:40:25 ]
>>533
>たとえば、サーバの実メモリを超えるようなデータを受け取ったときに処理できるのか?っていうのが疑問です。

添付ファイルデータなら、cgi.rb が一時ファイルに書き出してくれるので、実メモリを超えても大丈夫なんじゃないかなあ。

>また、なにか回避策が有るのでしたら、教えてください。

そのような場合は、cgi.rbを使わず、自前で$stdinからPOSTデータを読み出したほうがいいと思います。




554 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 19:58:15 ]
>>548 78JISに拘泥して混乱を広げた元凶だということも知らずに呑気な馬鹿だ。

555 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:01:03 ]
>>542 で必要最低限のことは全部触れられていそうだな

「本」をShift_JISとして見ると2バイト目が { なので、rubyのglob特殊文字になる。
というわけで、1.9では、2バイト目がrubyのglob特殊文字になる文字列をコマンドライン引数に与えると危ない、と。



556 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:04:04 ]
文字のエンコードが1種だけなら問題ないという話だろ

557 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:14:38 ]
勉強せずにスラスラ英語の文書読めるプログラマと、毎日英語と奮闘してるプログラマ
どれだけ差が開くと思う?
つまり日本がこの業界でアメリカに勝てないのは必然だ

558 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:20:16 ]
単なるrubyのバグの話でしょ

559 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:24:39 ]
Rubyに限らず
引数の文字コードって
どんなふうに判別するものなんだろう?

560 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 20:35:10 ]
引数の文字列自体はWindows-31Jにしてくれてるぞ

561 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:35:11 ]
インターネット時代なんだしJISで統一すれば何もかもうまく逝ってけどな。
いまからならOSもメールもウェブもUTFで統一。

562 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:42:47 ]
文字コードとかごちゃごちゃし過ぎて分からんから指定できるところはとりあえず全てUTF-8にしてる。
特に問題が起きたことはない。

563 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:43:48 ]
Win32で1.9.2プレビュー1をビルドしようとしたができんw
clにminiprelude.cがないぞゴルァって言われる
あるしちゃんとインクルードパスにも入ってるのに・・・

564 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 01:45:15 ]
>>546
おお、ありがとうございます。
しかしこれからどうしたらいいのか全然アイディアが浮かばないんです。
どういう方向性でいけばいいのでしょうか。

565 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 02:06:27 ]
>>564
わかんねーときは、わかる機能だけで作ってみるといいよ
ゴールを遠くに設定しすぎてるから方向わからないんだよ、チェックポイント作りまくれ



566 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 05:59:16 ]
いきなり無茶し過ぎなんだろ。小さい所から順々にステップアップしないと。

567 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:37:28 ]
とあるフォルダの中のファイル名をずらーっとデータベースに入れたのは良いんですが、
この後ファイルがそのフォルダに追加されるごとにデータベースも更新したいです。
差分を取る方法を教えてください。

568 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:39:12 ]
>> [1,2,3]-[1]
=> [2, 3]

ファイルリスト程度ならオンメモリで余裕だろう

569 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 14:49:58 ]
データベース自体は Ruby 以外を使うか、pstore に保存して cron とかで毎回読んでくれ

570 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 15:23:49 ]
>>565
>>566
なるほど、そういう考えもありますね。
もうちょっとこつこつやるべきでした、ありがとうございます。

571 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:30:46 ]
requireとかを使って外部のファイルを読み込むときですが

main.rb
class Main
def initialize
@foo = Array.new
require 'sub.rb'
end
end

main = Main.new
[EOF]

sub.rb
@foo.concat ['hoge']
[EOF]

みたいな場合にsub.rbからmain.rbの@fooにアクセスするにはどうしたらいいですか?
よろしくお願いします

572 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:40:01 ]
rquireは、対象コードをその位置に展開するメソッドではない。
中身が何でも気にしないなら eval File.read('sub.rb') とでも。


573 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:43:37 ]
>>571
require はトップレベルにファイルを「追加」する
ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)

メソッドの「奥深く」で require しても、クラス定義の外で普通に require したのと何も変わらない
それと、Ruby では、単純な行単位の切り取りを行うことはできない

現在のクラスにメソッド定義内で機能を追加するには、たとえば module の include を使う
メソッド単位でしか追加できないので、そこは要領よく機能を分ける

# sub.rb
module Sub
def add_hoge
@foo.concat ['hoge']
end
end

# main.rb
require 'sub.rb'

class Main
include Sub
def initialize
@foo = Array.new
add_hoge
end
end
p Main.new.instance_variable_get('@foo')


574 名前:571 mailto:sage [2009/10/03(土) 19:57:00 ]
>>572,573
レスありがとうございます。言葉足らずですいません・・・
sub.rbにはclassも書いてあるのでその場に展開されるとエラーになります・・・
sub.rbに書いてあるクラスをsub.rb内で初期化してそのオブジェクトをmain.rbの
方に持ち帰りたいです(プラグインシステムみたいな感じ)
グローバル変数を使えば出来るようですがあまりスマートじゃない感じですので
もうちょっとすっきりする方法があればと・・・

よろしくお願いします

575 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 20:16:58 ]
class Main
  def initialize(plugin_name)
    @foo = Array.new
    require plugin_name
    plugin_mod = Object.const_get(plugin_name.capitalize)
    extend plugin_mod
    do_something
  end
end

Main.new('plugin1')

# plugin1.rb
module Plugin1
  def do_something
    @foo.concat('hoge')
  end
end







576 名前:571 mailto:sage [2009/10/04(日) 15:48:48 ]
>>575
extendで何とかなりました
ありがとうございました

577 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:06:53 ]
ちょっとした質問です。

items.each{ |x| x.destroy }
というようなこう全部の要素にたいしてメソッドを呼ぶのを
もっと簡単に書く方法があったような気がしたのですが、ご存知ありませんでしょうか?

Ruby 1.8.7です。

578 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:09:46 ]
&:destroy


579 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:11:34 ]
>>578
それだ!

items.each(&:destroy)

でいけましたありがとうございました。

580 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:21:21 ]
1.8.6 では動かないから配布には注意な

581 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:11:40 ]
1.8.6 なんてもう使わない方がいいよ

582 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:36:26 ]
>>581
なんで?

583 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:49:02 ]
>>581さんがサーバソフトウェアのリプレースを行ってくれるそうです

584 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:28 ]
感謝の印におっぱい見せろ

585 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:39:11 ]
ごばくった。すまん



586 名前:デフォルトの名無しさん [2009/10/05(月) 23:44:01 ]
>>584-585
wwwwww

587 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:33:24 ]
お礼におっぱいを要求するような人間が使う言語、それがRuby


588 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:13:13 ]
だがそれがいい

589 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:14:57 ]
テンプレに追加しといて。

質問する人へ:
回答をいただいたら、ありがとうの言葉とともに、感謝の印としておっぱいを見せましょう。

590 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:45:57 ]
教祖もおっぱい成人だったか。

591 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:45:26 ]
>>573
> require はトップレベルにファイルを「追加」する
> ファイルを物理的に大きな1枚のファイルにする効果しかない(いや物理的って変だが)

$ cat s.rb
a=1
def f; 1; end
$ cat c.rb
require './s'
p defined? a
p defined? f
$ ruby c.rb
nil
"method"
$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

トップレベルでのローカル変数のスコープは require/load を越えないのでしょうか?


592 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:00:48 ]
require や load した場合、ローカル変数だけは、ファイルごとにスコープがあります
ローカル変数という概念を保護する制限だと思ってくだされ

require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません
ファイルとモジュールの構造を変えることのほうを強く勧めます

593 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:09:36 ]
数字をキーに持つハッシュがあり
その中で一番小さい数のキーの値を取り出したいのですが
単純に書くと以下になるんですが
他に何かこれだという方法はないでしょうか?

h = {2 => "a", 5 => "b", 7 => "c"}
p h[h.keys.sort[0]]
=> "a"

これで問題があるわけではないですが
他に方法がある気がしたので質問させてもらいました

594 名前:デフォルトの名無しさん [2009/10/07(水) 18:12:38 ]
hoge = moge.execute
print hoge

というとき、print hogeの hogeのところで moge.executeが参照され
実行されて得られた結果が、printされるという理解でいいですか?

595 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:16 ]
>>593
素直に書くなら
h[h.keys.min]



596 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:18:42 ]
>>594
一行目の時点で
>moge.executeが参照され実行されて得られた結果
がhogeに収まる
二行目はすでに収まってるhogeの中身を出力するだけ

>>594の日本語の部分をrubyで書くとこんな感じ?
hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない
print hoge.call # Procを実行する(moge.executeが実行される)


597 名前:デフォルトの名無しさん [2009/10/07(水) 18:22:48 ]
rows = dbh.do("INSERT INTO people (name,height)
VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
printf "%d rows were inserted\n", rows

ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
4 rows were insertedと表示されます。

printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
どういう動きをしているんでしょうか?


598 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:24:35 ]
そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、
Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、
既存のものをさがすかということになります。

以下、最近できたものなので、あるよ、という紹介しかできませんが、
depqという優先順位つきキューのgemがあります(あるはずです)。
ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441

599 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:21 ]
>>598>>593あてね

600 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:45 ]
>>596
考えていたことと逆でした。ありがとうございます。

601 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:35:10 ]
>>597
ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf
ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html

個人的には Ruby ではないので嫌い
to_s で問題の起こらない範囲で
puts "#{rows} rows were inserted"
と書くべき

602 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:40:22 ]
>>601
String#%は?

603 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:42:04 ]
>>602
異端審問される恐れがあるので
人前に晒すスクリプトでは使わないように

604 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:44:10 ]
スタイルの押しつけうぜぇ

605 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:14 ]
個人的にString#%は蛇道



606 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:21 ]
>>601
どもです。putsに書き換えて実行したところ同じように出ました。

どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して
4つの要素をDBに登録していますよね。

607 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:53 ]
>>604
Ruby使うの今すぐやめれ
プログラミングスタイル強制要素が無数に散りばめられてるぞ

608 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:58:58 ]
>>601
君にはPythonが向くんじゃないかな?性格的に。

609 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:02:23 ]
>>608
sprintf は Ruby のものではないということを知らない?

610 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:06 ]
>>606
そりゃそういうふうに作られてるからだろ
do のマニュアル読め
わざわざカウントして数値を返してるようなので初心者殺しではある

611 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:10:25 ]
sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、
ダラダラと旧来の仕様を引きずってきたんだよな
オタクが他の言語の知識を流用できて便利というただそれだけの理由で

612 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:00 ]
>>611
あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます
確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど
あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に

613 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:17:18 ]
>>610
どもっす。doのマニュアルを探してきます。



614 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:18:04 ]
printf類にrubyらしい実装なんて不要
他の言語と違う動作されたらそれこそ非難の的

615 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:33 ]
prntf などの「メジャーな関数」をなくせという話ではないように読めるが



616 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:25:25 ]
>>611
sprintfは別言語でそれやられて大迷惑
>>612も言ってるけどいまさら別に覚えるのも嫌だから
今までと同じでいいよ・・・

617 名前:593 mailto:sage [2009/10/07(水) 19:27:45 ]
>>595
minですね
探し切れてませんでした
ありがとうございます

>>598
なるほど、確かに求めてるのはヒープみたいなものでした
参考になりましたありがとうございます


618 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:32:02 ]
別にみんな自由に書けばいいじゃんw
Obsoleteでもない限り機能として用意されてるんだから使えばいいし
「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし

619 名前:591 mailto:sage [2009/10/07(水) 19:37:20 ]
どうもありがとうございました >>592

うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。
doc.okkez.net/static/187/method/Kernel/m/require.html
doc.okkez.net/static/187/method/Kernel/m/load.html

620 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:56:18 ]
ruby/dbiの公式に行きまして、classデータベースというページがあり
メソッドの説明がしてありました。しかし、記述が少ししかなく。
こういう場合、ソースを読むんでしょうか?

とりあえず、今は目的に必要なことだけをやっていこうと思います。

621 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:06:32 ]
>>597
>rows = dbh.do("INSERT INTO people (name,height)
>VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
>printf "%d rows were inserted¥n", rows
>
>ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
>4 rows were insertedと表示されます。
>
>printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
>どういう動きをしているんでしょうか?

1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。
それを printf "%d ", rows で出力している。そんだけ。

622 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:29:41 ]
>>620
ググったら公式じゃないけどこんなページがあったよ
ttp://www.nslabs.jp/book2-dbi.rhtml

623 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:31:28 ]
>>618
選択肢がないという話では

624 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:35:37 ]
>>623
>>602-603がそうはとても見えない

625 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:38:34 ]
>>624
sprintf 使ったことある?



626 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:45:18 ]
>>625
sprintf系まとめて異端だったの?
>>603は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど


627 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:51:44 ]
C に由来する sprintf や pack/unpack の書式記号や利用法が Ruby らしくないというツッコミなんじゃ…

628 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:57:52 ]
pack系はともかくsprint系に選択肢ないか?

629 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:02:21 ]
>>603はどう考えてもネタです

630 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:04:49 ]
pack は map で直接書くというコードの動作的にはある意味わかりやすい代替手段が

631 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:27:58 ]
しかしprintfを非難するとはいい度胸だ…これも平成ゆとりが増えたからなのか…

632 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:33:55 ]
packにせよprintfにせよ、DSLは不思議と好き嫌いが分かれる気がする

633 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:34:36 ]
>>631
「わかりにくい」ことは確か
初心忘れると老害と罵られるぞ

634 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:37:58 ]
反printf派に聞きたいんだけど
今より使いやすい(Rubyっぽい)printf構文ってどんなの?

635 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:39:17 ]
とりあえず「詳しくはmanページ読んでね」というのは頂けないな
「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに



636 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:14 ]
>>633
packは使ったこともないし使う場面もないから構文すら知らない。
rubyでdef endしちゃうから今後も使うことはないだろう。

637 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:50 ]
$と記号1つのグローバル変数(今となっては排除したいらしいが)も、
「Perlといっしょ」で通じなくなってきてるからな…


638 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:42:04 ]
printfを知らないとなると、rubyしか触ったことないってことになるんだがな…
webクリエータはたいてい適当だしそんなもんかw

639 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:00 ]
>>636
バイナリファイルのヘッダパースとかどうやってやってるの?

640 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:31 ]
>>636
irb1.8> p "ルビー"
"\343\203\253\343\203\223\343\203\274"

これ日本語に戻してー

641 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:44:32 ]
>>638
お前puts使わないだろ

642 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:47:39 ]
>>636
1.8でUnicodeEscapeSequence文字列が欲しいです先生

643 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:49:20 ]
>>640
evalしろ

644 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:50:35 ]
packはまあ・・・・使う時にリファレンスを見てやるしかないな

一方、青木氏はpackで壊れた
>まったくpackの意味不明さときたら、
>「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」
>と幼児退行してみたくなるほどです。

645 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:52:37 ]
>>643
こういう文字列をevalしろとな



646 名前:デフォルトの名無しさん [2009/10/07(水) 22:09:18 ]
青木氏って2chねら?

647 名前:デフォルトの名無しさん [2009/10/07(水) 22:27:52 ]
ttp://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
このファイルが開けないのですが、どーすれば良いのでしょうか。

648 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:31:52 ]
>>647
中身がタブ区切りのtsvだからです
っていうかファイルの中身確認することくらいしようぜ

649 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:34:21 ]
putsすると日本語でも表示されるよね
sjis問題で文字化けはするけど

650 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:44:34 ]
gets, puts ってのはもろにCだと思うんだが・・・

651 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:55:35 ]
え・・・そうだと思うけどなんか違った・・?

652 名前:デフォルトの名無しさん [2009/10/07(水) 23:28:42 ]
visualstudioみたいにボタンとかを貼り付けて入力フォームが作りたいんですが
ああいうツールは無いんでしょうか?

653 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:32:42 ]
CentOS上でruby1.8.7から1.9にアップデートしたいのですが、
Linuxの知識に乏しいためなかなか手が付けられません。
1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。
一般的にはどのような手段でアップデートするのでしょうか?

654 名前:デフォルトの名無しさん [2009/10/07(水) 23:34:49 ]
>>653
このスレ的には Debian にしろって言われると思うが。

655 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:34:51 ]
> Linuxの知識に乏しいためなかなか手が付けられません。
じゃあ無理だ
諦めろ
あとスレ違い



656 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:39:29 ]
こういう奴は何しにこのスレに張り付いてるんだろうか

657 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:41:38 ]
>>656
わりと適切だと思うが…
Linux使ったことあるか?

658 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:43:45 ]
make がなにやってるか理解しないといかんからなー
それはこのスレの範囲を超える
パッケージがないなら諦めれ

659 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:01 ]
貼りついてるw

660 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:15 ]
もろスレ違いだと思うが。


661 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:52 ]
Ruby公式ページにインストールガイドってリンクあるからみればいいよ

662 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:48:54 ]
教祖も使っているDebian最強

aptitude install ruby

663 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:49:18 ]
Linux上で、しかもLinuxに関する知識がないのなら
パッケージ管理システム(aptやyum)を使え、としか

664 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:54:26 ]
>>662
1.9.1は存在しない(Sid除く)

665 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:58:14 ]
この場合Linuxの知識は無関係だろ



666 名前:デフォルトの名無しさん [2009/10/08(木) 00:38:00 ]
>>653
package application で source または archive の site を追加…
大抵は package gpg key は初期の物が使える筈…
source package で compile install が出来るので在れば source を拾って来て install.

667 名前:デフォルトの名無しさん [2009/10/08(木) 00:50:15 ]
ruby は python を使えれば 使う事ができますか
python と ruby の関数で違う物は在るのでしょうか?

668 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:54:47 ]
フィッシングタイムですか?

669 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:58:16 ]
邪魔しないでください >>668

670 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:05:11 ]
>>667
全体的に大阪弁と東北弁ぐらいの違い

671 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:09:16 ]
>>667
片方が使えるなら、もう片方もさほど苦労しない

672 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:53:24 ]
gems.rubyforge.orgにgemでアクセスできなくない?

673 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:57:30 ]
rubyが司る世界において

数字の1が生まれたら、それは数字クラスに所属していて
数字クラスのメソッドにない動きは出来ないってことですか?



674 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:10:39 ]
Rubyには、オブジェクト(インスタンス)ごとにメソッドを定義できる、
特異メソッドという仕組みがあるので、たいていのクラスでは、イン
スタンスごとに振る舞いを変えることができる。
しかしながら、数(Numericおよびサブクラス)にはこれが定義できない
ように制限されている。

なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ
ソッドを追加した場合、既存の数インスタンスでも使える。


675 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:21:33 ]
irb> module One; def one; "one!"; end; end
irb> 1.extend(One)
TypeError: can't define singleton
from (irb):2:in `extend_object'
from (irb):2:in `extend'
from (irb):2
from :0
irb> "1".extend(One).one
"one!"
ああ、わかりやすいエラーだ



676 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:26:28 ]
>>673
一般的にはそう
クラスに定義された動作(メソッド)のみが可能
ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる
ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない
ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない
ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい

それと整数クラスは>>674の言うように例示にはちょっと不適

677 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:34:07 ]
>>675
数字と数の違いか:-p


678 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:22:07 ]
M1::C1::C2 というネストしたクラスがあります
あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです
文字列として正規表現で比較するしかありませんか?

obj.class.to_s =~ /\AM1::/

679 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:56:18 ]
>>678
どんな場合にも動作するのは文字列としての比較
Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない

680 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:02 ]
C → Java → Ruby と勉強してきましたが、次の言語は何がいいと思いますか?
プログラミングは単なる趣味です。

681 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:52 ]
Haskell

682 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:08:49 ]
Lisp系列が足りないな

683 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:20:33 ]
>>680
趣味というなら、マイナー言語でもいいよね。
Rubyとは真逆の、静的な関数言語がいいんじゃないかな。
OCamlかHaskellあたり。どちらも日本語での入門書があるし。

684 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:10:41 ]
railsで、webアプリを作るのに
必要な知識ってなんですか?

ruby
rails

正規表現
html,xhtml,xml
javascript
mysqlなどRDMS
apacheなどhttpサーバー

こんなもんでしょうか?

685 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:04 ]
>>684
他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし
なんじゃそりゃって感じだけど、まず間違いない

あとRailsは板違いなので
【Ruby】Ruby on Rails Part8
pc11.2ch.net/test/read.cgi/php/1252842574/
こっち池



686 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:17 ]
>>681-683
サンクス。

OCamlかHaskellあたりがお薦めなんですね。
了解しました。


687 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:20:43 ]
>>685
どもっす。半年間精進してダメなら諦めます。

688 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:40:15 ]
rspec 版の testrb コマンドってありませんか?

689 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:48:15 ]
>>688
spec -fs -c spec/


690 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:54:54 ]
>>689
1578 examples, 0 failures

っひょー

691 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:14 ]
>>690
おまえすごいな

692 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:32:09 ]
個人でもちょっと規模大きければこんなもんだろ

693 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:31:04 ]
俺レベルになるとワンライナーで大企業の基幹システムを作れるようになる

694 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:45:04 ]
rspec 使ってるとテストはやたら増える

695 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:08:57 ]
無印のサイトはシェルやワンライナーで作ってる、なんて言ってたけど、
どーりで重いわけだと思ったよ



696 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:18 ]
初心者らしい話題

class CArray < Array
end
a = CArray.new
b = CArray.new
c = a + b
p c.class #=> Array

CArrayを返してほしい。

class CString < String
end
a = CString.new("aaa")
b = CString.new("bbb")
c = a + b
p c.class #=> String

CStringを返してほしい。

697 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:17:14 ]
CArray というクラス名に吐いた

class CArray < Array
def +(v); self.class.new(super(v)); end
end


698 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:58:05 ]
a[0..1]みたいなのはちゃんと元のクラスにやってくれるんだよね

699 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:22:00 ]
Array や String の(Cで記述した) + メソッドの定義の中で
Array.new や String.new がハードコーディングされてるんだろうな
何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう
まあ、バグっちゃバグかもしれん

700 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:13:02 ]
>>698
むしろそっちのほうの挙動が不思議
Stringクラスの実装はCStringを知らないはずなのに、
どうしてCStringオブジェクトを返せるんだ?

701 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:28:37 ]
インスタンスがあればクラスわかるから返せるにきまっとるわい

702 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:03:22 ]
superのnew呼び出しでself.class.newってやるのきもくね?

703 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:10:19 ]
継承を前提としたクラスならってところ
組み込みでいえばIOとかNumericあたり

というか、otherと絡むときにわざと基本クラス返してる気がするなぁ


704 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:07:56 ]
レヴェルの低いインターネッツだな

705 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:22:09 ]
組み込みのくみこちゃんをdisるのはやめろ



706 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:06:39 ]
>>703
あらゆるクラスは継承で動作可能「でなければならない」
継承したとたん動作しなくなるライブラリはプギャー

707 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:26:07 ]
それぞれArrayを継承したFooとBarがあったとして foo + bar がどのクラスを返すべきかとか考えると
>>703の言うようにわざと基本クラスを返すのはありなんじゃないかと思う

708 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:31:28 ]
>>707
> foo + bar がどのクラスを返すべきか
変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき
つまり、foo のクラスを返すべき

709 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:54:09 ]
このパッチをあててリビルドすればOK
--- a/array.c
+++ b/array.c
@@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
VALUE
rb_ary_plus(VALUE x, VALUE y)
{
+ VALUE klass;
VALUE z;
long len;

y = to_ary(y);
len = RARRAY_LEN(x) + RARRAY_LEN(y);
- z = rb_ary_new2(len);
+ klass = rb_obj_class(x);
+ z = ary_new(klass, len);
MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));

710 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:07:52 ]
本当にそのほうがいいと思うなら、
redmine.ruby-lang.orgにfeature request投げとけば。

個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。

あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。

711 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:22:54 ]
>>710
危険というか取り込み不可能
というか別にそんなことを意図したコードでもあるまい
お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ

712 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:50:19 ]
無理矢理ねじ込んだ感バリバリの3行目に
ドカタのストレスを見た。

713 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:56:26 ]
言われるか言われないかのどっちかワロタ

714 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:27:56 ]
質問です;;
mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません

undefined method `destroy'

destroyが使えない??
newもfindも使えるのに・・
解決法知ってる方いたら教えてください

715 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:40:02 ]
MVCと直接関係ない質問に見えるけど何の話?




716 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:45:48 ]
要するにdestroyメソッドを使う方法がわからないです


717 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:47:12 ]
destroyメソッドってなに?

718 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:49:12 ]
すいませんここはrailsは対象外なんですかね・・
他当たってみます

719 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:51:30 ]
>>718

RailsならRailsと言え。
MVCってのはRails固有の概念ではない。

あと、
【Ruby】Ruby on Rails Part8
pc11.2ch.net/test/read.cgi/php/1252842574/



720 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:33:54 ]
undefined method `destroy'の後が重要だったりするんだよな

721 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 17:12:32 ]
>>720
この場合はいいえ

722 名前:714 mailto:sage [2009/10/11(日) 01:00:33 ]
>>721
何か知ってる事あったら教えてもらえますか?

723 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:07:07 ]
うざ

724 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:59:17 ]
PStore.dump してファイルに保存済みのデータがあったとし

a = nil
PStore.new(...).transaction do |c|
a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない)
end

x = a[...][...].XXX[...]

というように PStore.transaction の外で読み込んだデータ
を使っても問題ないものなのでしょうか。

内部的には Marshal.load しているということなので、問題
ないような気もするのですが、ドキュメントの記述を見ると
そういう使い方していないようなかんじなので…。

725 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:02:25 ]
Marshal.dump は唯一、標準ライブラリで深いコピーを行う



726 名前:724 [2009/10/11(日) 12:16:24 ]
なるほど >>725 さん
PStore が Marshal 上に実装されているという前提が変わらない限りは
PStore#transaction の外にデータを持ち出しても問題ないわけですか

これまで無駄に transaction の内部にコード入れていたので書き直そう…。




727 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:20:45 ]
>>724
PStore#transactionは、
* 同じデータファイルに対する他のPStoreアクセスを禁止している
(読んでる間に書き換えられないように)
* ブロック処理がabortされなければ、変更の再ダンプを行う。
という感じの仕事をしている。

中で読んだデータはそのままメモリにある。ブロックを出たあと、
誰かがデータファイルを書き換えたとき、それとメモリが一致しな
いということを認識した上でなら問題ない。



728 名前:724 mailto:sage [2009/10/11(日) 12:43:24 ]
まさにそのあたりが気になっていた(transaction 抜けたら参照している
データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、
明快な説明どうもありがとうございました >>727 さん


729 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:19:20 ]
きちんとトランザクションって書いてあるだろ
トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも

…実装としてありそうな気もするな
トランザクション有効中に明示的に複製してクダサーイというのはアリではある

んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う
データを取得または保存する瞬間にだけ、トランザクションに入る
何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する

なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意
変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない
データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得

730 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:36:09 ]
WinでAutoHotKeyの代わりに使える機能を完備してあるライブラリってない?

731 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:56:05 ]
繰り返し処理で正規表現を使う場合
a.each do |b|
print "match" if c =~ /hoge/
end
よりも
reg = Regexp.new("/hoge")
a.each do |b|
print "match" if c =~ reg
end
の方がいいでしょうか?

732 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:05:15 ]
そういうのは正規表現の中に変数を含む場合です

733 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:12:35 ]
変数を #{} などで含まない「固定」の正規表現は1回しか生成されない

1.upto(10000).each do
/h/ =~ "hoge"
end

でも

re = /h/
1.upto(10000).each do
re =~ "hoge"
end

でも、Regexp のインスタンス生成は1回だけ
つまり、処理速度や負荷的には実質どちらでも構わないし、
厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い

734 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:34:33 ]
>>732-733
なるほど、ありがとうございます

735 名前:724 mailto:sage [2009/10/11(日) 22:15:19 ]
RDBを使うほどでもないけどちょっと中間データをファイルとして永続化して
おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で
Marshal.dump/load するより楽なので PStore を使っていたのですが
PStore#transaction でデータ処理全体をブロックする必要があるのかないの
か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強
になりました、どうもありがとうございます >>729 さん




736 名前:デフォルトの名無しさん [2009/10/12(月) 19:03:31 ]
rand()の範囲を指定したいのですが
10から20の間の数をランダムに発生させたいというばあい
rand(10-20)とか直接与えることは出来ますか?


737 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:13:37 ]
0から10の範囲の乱数を発生させて10を加える。


738 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:18:20 ]
>>737が正解

739 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:21:25 ]
俺俺ライブラリに

class Range
  def rand
     Kernel.rand(last-first+1)+first
  end
end

ってやっといて
(10..20).rand
するとか
標準じゃ無理

740 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:29:25 ]
(10..20).to_a.sort_by{rand}.first

741 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:39:58 ]
>>740短いのですがどうもちゃんと動作しないようです。
(1..2**30).to_a.sort_by{rand}.first
としましたが、結果がかえってこないのであきらめました。

742 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:07:39 ]
>>741
そりゃ単に重すぎるだけだ
要素数が2**30の配列を作ってるんだから

そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ

743 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:08:59 ]
だから>>737以外は実用妥当な乱数にならねえって

744 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:09:56 ]
スレタイ100回読んで半年ROMっとけ

745 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:15:49 ]
乱数発生部は組み込みに任すのが完全に正しい姿だな
累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが



746 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:17:49 ]
最近/.並にゴミで埋まるようになってきたなここ。

747 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:23:23 ]
>>746
2chも大差ないだろ

748 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:24:39 ]
>>746
斬新な自己紹介ですね

749 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:40:35 ]
こういうありきたりなループの終了条件に
!=を使うのは普通ですか?

count = 1
end_count = 10

while count != end_count
puts count
count = count + 1
end

750 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:44:09 ]
へん

751 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:48:03 ]
(1...10).each {|i| puts i}

じゃだめなん?

752 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:50:22 ]
count が増えるとは限らないのだろ

loop do
 break if count == end_count
 ...
end

せめて break して欲しい

753 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:08:18 ]
>>752
何でbreakの方を推すの? 横から見てもいまいちわからん
普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど

754 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:15:49 ]
あまり使わないんですね。
気をつけます。ありがとうございます。

755 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:18:26 ]
あまり使わないのか?
場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど



756 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:21:14 ]
>>740
単に非効率なやり方だろ
他人に教えるようなものじゃない

757 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:29:55 ]
C++のSTLのイテレータに慣れてるとそう書きたくなるな。

758 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:38 ]
読みやすい until などというものは存在しない
と思う






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef