09/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つをすること。ここで回答を待つよりそのほうが早い。
・モジュール名やエラーメッセージでググる
・マニュアルで引っかかったクラスの記述を探す URLリンク(www.ruby-lang.org)
・FAQを一応読む URLリンク(www.ruby-lang.org)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
2:デフォルトの名無しさん
09/09/17 17:31:50
【よくあるしつもん】
Q:
いちからRubyを始める初心者向けのRuby入門書は何がありますか?
A:
プログラム作成自体の初心者なら
・「たのしいRuby 第2版 Rubyではじめる気軽なプログラミング」
URLリンク(www.amazon.co.jp)
文法は理解済み(orリファレンスで乗り切る既言語習得者)の場合のRuby様式を知る必携2冊目
・「初めてのRuby」
URLリンク(www.amazon.co.jp)
以下は外れが少ないとされている本です。必ず立ち読みした上で自分の目的とレベルに応じて購入してください。
・「Rubyレシピブック 第2版 268の技」(初心者向け)
URLリンク(www.amazon.co.jp)
・「プログラミングRuby 第2版 言語編」(初心者向け)
URLリンク(www.amazon.co.jp)
・「Ruby Way 第2版」(脱初心者向け)
URLリンク(www.amazon.co.jp)
・ 「Rubyクックブック ―エキスパートのための応用レシピ集」(脱初心者向け)
URLリンク(www.amazon.co.jp)
以下の本は言語作者が書いた最新本ですがとりあえず初学者向けではありません。
・「プログラミング言語 Ruby」(言語として深く知りたい人向け)
URLリンク(www.amazon.co.jp)
3:デフォルトの名無しさん
09/09/17 17:32:33
Ruby 公式・非公式便利サイト2009
・Ruby Home Page 【公式、お役立ち度が微妙】
URLリンク(www.ruby-lang.org)
・Rubyリファレンスマニュアル 【検索機能休止中、Googleなどの併用を】
URLリンク(www.ruby-lang.org)
URLリンク(www.ruby-doc.org) 【詳しい英語版】
・HTMLヘルプ版リファレンスマニュアル配布さん 【Windowsで便利、検索も無論可能】
URLリンク(elbereth-hp.hp.infoseek.co.jp)
・Programming Ruby - The Pragmatic Programmer's Guide 【好評書籍の初版がネットで、ただし英語】
URLリンク(www.ruby-doc.org)
・Rubyist Magazine - るびま 【ライブラリ紹介などの読み物、過去のコードレビューは一読の価値あり】
URLリンク(jp.rubyist.net)
・逆引きRuby 【やりたいことから探すWiki、最近元気ないので編集者募集】
URLリンク(www.namaraii.com)
・はてなキーワード > Ruby 【うっかりどっさりまとまったリンク集、説明なし】
URLリンク(d.hatena.ne.jp)
・RubyForge 【○○をやりたい管理されたライブラリを探すならここ、英語】
URLリンク(www.rubyforge.org)
・GitHub 【○○をやりたいコードをとにかく探すならここ、英語】
URLリンク(github.com)
・日本Rubyの会 【最近はオフライン勉強会の寄り合い場と化しているので近くで勉強会があれば】
URLリンク(jp.rubyist.net)
4:デフォルトの名無しさん
09/09/17 17:33:17
関連スレ
・Rubyについて Part 37
スレリンク(tech板)
アンチスレ
・Rubyについて(アンチ専用) Part004
スレリンク(tech板)
Railsスレ
・【Ruby】Ruby on Rails Part8
スレリンク(php板)
Windows用スレ
・【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)
Ruby 1.9 系列スレ
・魁け! Ruby 1.9.X
スレリンク(tech板)
5:デフォルトの名無しさん
09/09/17 17:34:03
前スレ
・Ruby 初心者スレッド Part 30
スレリンク(tech板)
・Ruby 初心者スレッド Part 29
スレリンク(tech板)
6:デフォルトの名無しさん
09/09/17 17:37:51
バージョンに関するよくある質問
・Ruby 1.8.5
レンタルサーバ等にいまだに残ってる古いバージョン
1.8.6 にすらなってない理由はたぶん管理の手抜きなので怒ってよい
・Ruby 1.8.6
過去の長期政権と数の暴力で一大勢力圏を維持中
公開スクリプトはこれでも動作するべきではあるんだがそろそろ 1.8.7 に譲ってくれ
・Ruby 1.8.7
1.9 シリーズとのハイブリッドなバージョン、初学者にこそお勧め
1.9 系から輸入された機能は 1.8.6 では動かないが「1.8.6が許されるのは(AA略」と煽ってよい
・Ruby 1.9.0
不安定にして先鋭機能が超満載の開発版バージョンだったもの
1.9.x は本来全てが開発版の呼称だったのだが、事情が変わって(ここ笑うところ)1.9.1 は安定板に
・Ruby 1.9.1
満を持して登場の 1.9 系列安定板(本体は 1.8.6 程度には使えるということになっている)
本体と添付ライブラリの動作は問題がないのだが外部第三者ライブラリが全く追いついていない
初心者を脱した人が外部ライブラリの開発コミュニティに参加してくれたりすることを期待中
7:デフォルトの名無しさん
09/09/17 17:38:55
おまけ
・Rubygem 0.x
極悪動作をすることで有名なRuby外部ライブラリ利用サポートプログラム群のバージョン
このバージョンしかパッケージが存在しないUNIX系ディストリビューションがあって結構問題に
しかも「rubygem本体の自己更新機能は殺してるのでパッケージから入れてね」とかほざきやがる
パッケージがバージョン 1 より前のものしかない場合はソースからインストールするとよい
8:デフォルトの名無しさん
09/09/17 17:48:10
>>1おつ
>>6
> 1.9 系から輸入された機能は 1.8.6 では動かないが「1.8.6が許されるのは(AA略」と煽ってよい
ハッハッハ、こやつめ
9:デフォルトの名無しさん
09/09/17 18:00:13
プログラミング自体がまったくの初心者ですがrubyがんばって習得したいと思います
とりあえずrubyをインストールしてvimというテキストエディタから動かしたいのですが
自分なりにいろいろ調べてみたのですがわかりません・・・
おしえてください
よろしくお願いします
10:デフォルトの名無しさん
09/09/17 18:05:25
vim は使わなくてよい
素直に通常のテキストエディタで書いて
素直に通常のターミナルなりコマンドプロンプトなりから実行しろ
11:デフォルトの名無しさん
09/09/17 18:07:34
vimを使いたいのです
よろしくお願いします!
12:デフォルトの名無しさん
09/09/17 18:12:37
じゃあvimで書いて、vim終了させて実行しる
13:デフォルトの名無しさん
09/09/17 18:13:46
>>9
そうだな、まずは使っているOSとインストールしたRubyのバージョンから聞こうか
14:9
09/09/17 18:18:07
>>13
すいません
使っているOSはWindos XP sp3 32bit?です
rubyはまだインストールしていません
こちらで聞いて教えてもらってやった方が確実だとおもったので
よろしくお願いします
15:デフォルトの名無しさん
09/09/17 18:23:57
vim は使わなくてよい
素直に通常のテキストエディタで書いて
素直に通常のターミナルなりコマンドプロンプトなりから実行しろ
16:デフォルトの名無しさん
09/09/17 18:26:36
全角uza
17:デフォルトの名無しさん
09/09/17 18:28:30
>>14
最初はRubyistMagazineのページを見るといいかも。
URLリンク(jp.rubyist.net)
以下引用
> Windows Me, 2000, XP, Vista (95, 98, 98SE)
> -------------------------------------
> 以下のサイトから ActiveScriptRuby の最新版をダウンロードしてインストールしてください。一番上からダウンロード出来るものをインストールして下さい。
> Windows 98 以前の Windows をお使いのかたは、あらかじめ Windows Installer 1.1 以上を入手しておく必要があります。
> URLリンク(www.artonx.org)
> ActiveScript というものが何であるかを気にする必要はありません。
>>15
べつにVimでもいいんじゃない?どうもVimを使いたいという強いこだわりがあるようだし。
18:デフォルトの名無しさん
09/09/17 18:36:31
>>14
1. ActiveScriptRubyをインストールする
2. コマンドプロンプトを開く
3. notepad test01.rb
4. メモ帳が開くので、コードを書いて保存
5. ruby test01.rb
19:デフォルトの名無しさん
09/09/17 18:37:20
あ、3と5はコマンドプロンプトに打ち込む。
20:デフォルトの名無しさん
09/09/17 18:39:56
ここで Cygwin とか言ったら怒られるんだろうなあw
Poderosa とあわせて結構快適だったんだが
vim っていっても gvim のことなんだろうし
21:デフォルトの名無しさん
09/09/17 18:45:06
Cygwinは悩みの種になった記憶のが多い…
俺はCygwin入れるくらいなら仮想マシンにLinux入れるわ
22:9
09/09/17 18:45:18
>>17
ありがとうございます
やってみます
>>18
メモ帳じゃなくてgvimを使いたいので・・・
こだわりです
vimじゃなくてgvimでした
すいません
23:デフォルトの名無しさん
09/09/17 18:47:33
>>22
どうでもいいがコードを書くときは全角じゃダメだぞw
24:9
09/09/17 18:49:01
安定版と最新版はどっちがいいでしょうか?
25:デフォルトの名無しさん
09/09/17 18:49:41
最新版と書いてありますね
すいません
26:デフォルトの名無しさん
09/09/17 18:55:32
>>9
まずはがんばれ。
初心者がどういうところでつまづくかというデータは大変貴重なので、
気が向いたときに「こういうところでつまづいた」というレポートをお願いします。
27:9
09/09/17 18:55:58
ActiveScriptRubyの最新版のインストールが終わりました
28:9
09/09/17 18:57:11
>>26
ありがとうございます!がんばります
とりあえず開発環境を作っているところです
よろしくお願いします
29:デフォルトの名無しさん
09/09/17 18:57:39
通常は、ダサいアイコンを変更します
30:デフォルトの名無しさん
09/09/17 19:00:10
プログラミング自体初心者でvimにこだわりってすごいなw
vim自体の操作には慣れてるのか? >>9
って、プログラミング初心者でvimに精通とかないよな
こりゃ無理だと思ったら当初の目的(プログラミング)を思い出して
とりあえずは普通のテキストエディタに戻ってやることを勧めておく
31:9
09/09/17 19:00:33
たしかにかっこわるいですね・・・
クールな?アイコンないですか?
みなさんが使っているアイコンをおしえてください
真似します
32:デフォルトの名無しさん
09/09/17 19:02:12
そんなのは hello. world の後でいいって
33:デフォルトの名無しさん
09/09/17 19:04:17
vista で動く、RDE 以外の軽い IDE ないですかね?
うちの環境では RDE は微妙に不安定なんで。
34:9
09/09/17 19:04:35
>>30
まったくなれていませんし知識もありません
テキストエディタを画像でぐぐったときにgvimが一番かっこいいと思ったので
それだけです
自分はなんでも形から入る傾向があるのもあります
35:デフォルトの名無しさん
09/09/17 19:06:22
ActiveScriptRubyの最新版のインストールは終わりましたので
gvimのダウンロードからrubyとの関連づけ?の手順をおしえてください
教えてばかりで本当にすいません
よろしくお願いします
36:デフォルトの名無しさん
09/09/17 19:07:18
RubyistMagazineのページに、チュートリアルが紹介してあんのな。
URLリンク(jp.rubyist.net)
> Ruby ではじめるプログラミング
>
> とりあえず何をしたらいいのかわからない、という人は本誌 Rubyist Magazine の初心者向け連載があります。
> URLリンク(jp.rubyist.net)
> ただし、この連載はプログラミング自体の初心者を対象にしているため、 すでに他言語でのプログラミング経験がある方には少々簡単すぎると思います。
>>9よ、これやってみない?『プログラミング自体の初心者を対象にしている』そうだから、
これを読んでわからなかったことを報告してもらえたら、
この記事の改善点として誰かがとりあげてくれるかもしれない。
37:デフォルトの名無しさん
09/09/17 19:07:25
>>33
RDEはどの環境でもだいたい不安定だよ
38:9
09/09/17 19:09:00
>>36
やります!
でもそのまえにvgimのほうを・・・
39:デフォルトの名無しさん
09/09/17 19:09:32
>>33
「Ruby IDE」でぐぐってみよう。
Java製のならVistaでも動くと思う。
40:デフォルトの名無しさん
09/09/17 19:10:37
>>38
たぶん、vimがいかに初心者に厳しいかを知らないのだろう。
悪いことは言わん。vimはhello worldができるようになってからにしておけ。
41:デフォルトの名無しさん
09/09/17 19:12:25
荒らしだろjk
42:9
09/09/17 19:12:29
One-Click Installer - WindowsとActiveScriptRubyは別物ですか?
43:9
09/09/17 19:13:57
荒らしではないですよ
真剣にやってます
44:デフォルトの名無しさん
09/09/17 19:14:21
>>9
vim Part3
スレリンク(software板)
45:9
09/09/17 19:17:58
hello worldのプログラムできました
うまく動いてくれたようです
46:デフォルトの名無しさん
09/09/17 19:22:21
>>42
別物。似てるけど。
RubyistMagazineがActiveScriptRubyをお勧めしている以上、そっちをインストールしたほうがよい。
>>34
>テキストエディタを画像でぐぐったときにgvimが一番かっこいいと思ったので
>それだけです
そんな理由でgvimを選んだやつはまちがいなく挫折する。
gvimは敷居が高すぎるから初心者はやめておけ。
47:9
09/09/17 19:29:16
>>46
わかりました
gvimは敷居が高いですか・・・
URLリンク(skitch.com)
こんな感じでやりたかったのです
ただかっこいい
それだけです
48:デフォルトの名無しさん
09/09/17 19:39:11
>>47
これはMacのターミナルではないか?
ターミナルは半透明に出来るのでデスクトップピクチャ(壁紙)の猫が
透けて見えている。
49:デフォルトの名無しさん
09/09/17 19:45:19
>>47
初心者がWindowsで使うなら、エディタとしては秀丸やxyzzyでいいんじゃないかな。
これなら初心者でも使えるし、習熟するにつれて強力にカスタマイズもできるし。
gvimはほんとのプロフェッショナル向け。プロが作業を極めるための道具であって、初心者が手を出す代物ではない。
50:9
09/09/17 19:45:44
>>48
そこはどうでもいいのですがこんなかっこいい画面でプログラムを作りたいのです
51:9
09/09/17 19:48:37
>>49
xyzzyもいいですね!
これなら初心者も使えるとのことなのでこれでお願いします
インストールから環境設定までおしえてください
よろしくお願いします
52:デフォルトの名無しさん
09/09/17 19:49:33
カエレ
53:デフォルトの名無しさん
09/09/17 19:51:08
>>49
xyzzyも自分でなんとかする人じゃないと相当難儀だぞw
54:デフォルトの名無しさん
09/09/17 19:53:29
やはり教えてばかりでは嫌われますね
こちらはいたって真剣なのですが
55:9
09/09/17 19:54:10
>>54はボクのレスです
56:デフォルトの名無しさん
09/09/17 19:58:39
>>49
xyzzy駄目だろ
まさかvim使えないような奴に最初からgates.l入れさせる気か
着色と自動インデントさえされればなんでもいいはずだ
57:デフォルトの名無しさん
09/09/17 20:02:40
>>54
自分のスレを読み返してごらんよ
Ruby よりエディタへの言及の方が多いよ
58:デフォルトの名無しさん
09/09/17 20:10:31
hello world はgvimで書いたのか?
59:デフォルトの名無しさん
09/09/17 20:11:36
この人に必要なのは、いろんなエディタをインストールして
ひととおり色設定をいじって遊んでみることだと思う。
60:デフォルトの名無しさん
09/09/17 20:12:14
gvimの話はよそでやってくれ、とりあえず。
というか、vimをNGワードにするのが適切だな、こりゃ。
61:9
09/09/17 20:12:56
>>58メモ帳です
62:デフォルトの名無しさん
09/09/17 20:45:34
エディタのことは忘れて、まずは>>36のチュートリアルをやろうぜ。
エディタを語るにはきみはまだ若い。
63:9
09/09/17 21:00:39
>>62
わかりました
質問があります
hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
いちいち保存先までcd \とか入力していかないとエラーが出るので面倒です・・・
どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
今まで検索していたのですがnotepad++というエディタがありました
画面の色とか文字の色とか適当にいじって変えてます
gvimやxyzyyはまだまだ先のような気がします
かなり上級者向けのようです
でもやはり形だけでもいいのでgvimやxyzyyでやりたいですねえ・・・
64:デフォルトの名無しさん
09/09/17 21:03:13
>>63
> どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
Ruby関係ないのでコマンドプロンプトの使い方勉強しろ
ディレクトリ移動関連の最低限必要なことは10分もあれば終わる
65:デフォルトの名無しさん
09/09/17 21:16:20
昔話は嫌われるのだが、
UNIXからMSに移植されたツールは、とても多い。
sed,grep,awkとかね。
今でも、とても役に立ちますね。
MS-DOSの始めの頃に、**とか言う名前のフルスクリーンエディターが発売されました。
MS-DOSの環境であれば、同じようにちゃんと動く、ってのが売りです。
(このあたりが?の人は考古学者になったつもりで調査すべし)
結局、これは商業的な成功はなかったみたいですね。
INT21のせいだと思うのですが、とても遅かったのですよ、表示が。
ん、眠くなったので、続く
66:デフォルトの名無しさん
09/09/17 21:21:17
スレ違い。初心者スレですので無用な語りはお避けください。
67:デフォルトの名無しさん
09/09/17 21:33:14
>>63
>質問があります
>hello.rbというhello!と表示するプログラムを作ったのですが実行するときに
>いちいち保存先までcd ¥とか入力していかないとエラーが出るので面倒です・・・
>どこからでも○○○.rbと入力して実行するようにはできないのでしょうか?
質問の意味がわからない。どんなエラーがでるの?
68:デフォルトの名無しさん
09/09/17 21:38:36
>>67
いやそれはそのまんまだろ
コマンドプロンプトの起動時のカレントディレクトリと自作ファイルを置くディレクトリが違うんだ
例はたいていカレントにあるスクリプトを起動しているから、それと同じようにするにはどうしたらいいかという話
つまりはディレクトリの概念と操作の勉強が要る
69:9
09/09/17 21:42:57
>>68
コマンドプロンプトを開いたときは常に自作ファイルをおいているディレクトリから
はじめることはできませんか?
今の環境だといちいち自作ファイルをおいてあるディレクトリまでcdコマンドで移動しないと実行できません
>>68
ruby: No such file or directory -- hello.rb (LoadError)
70:9
09/09/17 21:47:06
Cドライブの下にsrcというフォルダを作成してここに自作ファイルを保存しています
コマンドプロンプトから自作ファイルを実行するときは
ruby ○○○.rb 実行とするだけで動くようにはできませんか?
今の環境でこれをすると
ruby: No such file or directory -- hello.rb (LoadError)
と表示されてしまいます
ruby c:\src\hello.rb 実行とすれば動いてくれるのですが
71:デフォルトの名無しさん
09/09/17 22:09:11
はやくパッチレベル上がらんかな
mingw使いはバイナリを上げられんではないか
72:デフォルトの名無しさん
09/09/17 22:27:10
p0がどんどん広まるよー
73:デフォルトの名無しさん
09/09/17 22:27:36
>>69
そういうことはできるのかな。わかんない。
移動がめんどくさいというだけなら、最初から「C:¥」を指定してコマンドプロンプトを起動するのはどうだろうか。
(1) C:¥Documents and Settings¥ユーザ名¥スタートメニュー¥プログラム¥アクセサリ をエクスプローラで開く
(2) 「コマンドプロンプト」ショートカットをデスクトップにコピー
(3) コピーしたショートカットを右クリックして「プロパティ」を選ぶ
(4) 「ショートカット」タブの「作業フォルダ」を「C:¥src」に指定して、OKボタンを押す
(5) コピーしたショートカットをダブルクリックすると、「C:¥src」に移動していることがわかる
>>68
おまえかしこいな。おれはさっぱりわからんかった。
74:9
09/09/17 22:50:25
>>73ありがとうございます!
らくになりました!
75:デフォルトの名無しさん
09/09/18 04:52:49
>>33
NetBeansオススメだぜ。
俺はRubyでちょっとした使い捨てプログラム書くときはxyzzyのruby-mode、
仕事のプロジェクトはNetBeansと使い分けてる。
>>69
"Command prompt from here"いれろ。ぐぐったらでてくる。
エクスプローラーからフォルダの右クリックで、そのフォルダを作業フォルダにしてコマンドプロンプトを開けるようになる。
76:デフォルトの名無しさん
09/09/18 11:27:41
>>75
すでに解決しております
ありがとうございます
またお願いします
77:見習い ◆YG1xRh8M6Ffb
09/09/18 11:39:09
>>9です
質問することが多いと思いますので名前をつけさせていただきました
よろしくお願いします
78:デフォルトの名無しさん
09/09/18 12:12:53
>>77
コテつけてくれるのはありがたい。
さ、NGにしよっと。
79:デフォルトの名無しさん
09/09/18 12:19:14
無駄にスレをのばさないでください。>>見習い
S/Nが低下し過ぎ。
これがつづくと、だれもこのスレをみなくなって
質問しても答えてくれる人がいなくなってしまう。
80:デフォルトの名無しさん
09/09/18 12:20:16
>>77
まあ気長に頑張れ
>>2 は見たか。多少値がはっても入門書ぐらいはちゃんとしたのを
買った読んで方がいいぞ
81:見習い ◆YG1xRh8M6Ffb
09/09/18 12:23:09
>>78さんw
>>79
気をつけます
すいません
S/Nってなんですか?
>>80
ありがとうございます
入門書は買うつもりです
PCだと目が疲れてくるのでやっぱりじっくり見てやるなら紙のほうがいいです
82:デフォルトの名無しさん
09/09/18 12:25:50
君はググることすらしないのになんでここにいるん
83:見習い ◆YG1xRh8M6Ffb
09/09/18 12:34:55
>>82
ググってますよ
84:デフォルトの名無しさん
09/09/18 12:38:37
>>79
どうして存在を認めて名前で呼ぶの
85:デフォルトの名無しさん
09/09/18 12:55:44
初心者スレだから、いいんじゃね。
むしろ、初心者がどこで躓くのかを俺は知りたい。
86:デフォルトの名無しさん
09/09/18 13:01:55
>>85
それを知りたいならこの板全部読め
全部載っている
87:デフォルトの名無しさん
09/09/18 13:04:19
>>83
S/Nでぐぐった?
人に聞く前に自分で調べようって話
88:見習い ◆YG1xRh8M6Ffb
09/09/18 13:08:30
>>87
ぐぐりましたけどどれも関係なさそうなものばかりですよ
89:デフォルトの名無しさん
09/09/18 13:31:00
rubyで再起処理をしようとすると、undefined method `each' for nil:NilClassと出ますが、再帰処理はできないのですか?
90:デフォルトの名無しさん
09/09/18 13:33:00
>>88
いい加減なことを言うなよ
検索結果の最上位にずらっと並んでいるだろ……
というか、こういう Ruby とは何の関係もないやり取りがまさに N なわけだよ
91:デフォルトの名無しさん
09/09/18 13:35:52
>>89
各オブジェクトがeachを持っているかどうかの判断をする必要があるんじゃないの?
92:デフォルトの名無しさん
09/09/18 13:36:55
>>89
それは書き方間違ってるだけです
エラーの理由がそのまんまです
[1,2,3].each do |e| … と直接書いた場合は [1,2,3] をeach 内から読む手段がないんで
再帰したい場合はご面倒でも arr = [1,2,3] と変数として一度定義してから arr[1..-1] とか呼んでください
93:デフォルトの名無しさん
09/09/18 13:37:14
>>89
意図せず nil に対して each を呼んでいる
コードを張れ
94:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 13:49:58
>>94
よくわからないけど停止条件が見当たらないよ
96:デフォルトの名無しさん
09/09/18 13:50:01
原因がわかりました。
再帰したときにrefCellNameがnilになっています
(最初に呼び出された時は正しいデータが入ってました)
再帰したらrefCellNameのデータってnilになるものなんでしょうか?
97:デフォルトの名無しさん
09/09/18 13:51:29
>>95
停止はrefCellName[activeCell]の中が空になったときです
98:デフォルトの名無しさん
09/09/18 13:53:34
>>97
> 停止はrefCellName[activeCell]の中が空になったとき
refCellName[activeCell] が空になったら再帰から抜ける、という部分の
コードが見当たりませんが?
それと、空になるとはどうことだと理解してますか?
99:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 13:59:21
>>96
いやそれであのエラーは出ない
nil[:a].each #=> NoMethodError: undefined method `[]' for nil:NilClass
each のレシーバが nil だっていうエラーだから
refCellName[activeCell] が nil のはず
どうしてそれが nil になるのかはよくわからん
refCellName から要素を削除する仕掛けが停止条件兼ねてどっかにあって
それと干渉してるんじゃないの?
101:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 14:04:24
うん、再帰使ってるプログラムは
停止条件が関数の頭のほうに書いてあると漏れでも理解できて非常に助かる
103:デフォルトの名無しさん
09/09/18 14:05:54
>>101
「NilClass に each メソッドが定義されていない」と認識するべき
レシーバが nil だからではない
nil.to_s は NilClass#to_s が定義されているからエラーは出ない
空文字列を返す
104:デフォルトの名無しさん
09/09/18 14:08:36
>>103
なるほど
納得しました。クラスごとに定義が必要でnilにはなかったと
ありがとうございました
105:デフォルトの名無しさん
09/09/18 16:25:12
初心者にカリカリしている人が多いようなので、再掲しました。
>>1
>■回答する人へ
>相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
>それができないならこないこと(だって初心者スレだもん)。
> ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
> ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
> ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
ここは初心者がバカな質問をすることを大目に見てあげられるマゾヒストのためのスレです。
初心者にカリカリするような人はこないでね。
106:デフォルトの名無しさん
09/09/18 16:30:37
◆YG1xRh8M6Ffb乙
107:デフォルトの名無しさん
09/09/18 16:40:08
>>105
「Rubyに関する」既出な質問やわけわかな質問なら、いくらでも大目に見る
スレ違いな質問(S/Nとか)はよそに行け
加えて言うと、調べる気がなさそうな人間に対しては
いくらマゾヒストでも親切でも教える気になれんよ
人力検索サイトに行け
108:見習い ◆YG1xRh8M6Ffb
09/09/18 16:52:14
ルビーのショートカットアイコンを変更したいのですが
右クリックしてプロパティから変更しようとしても”アイコンの変更”ボタンが
アクティブ?の状態になっておらず変更できません
どうすればいいですか?
よろしくお願いします
>>106
ちがいますw
109:デフォルトの名無しさん
09/09/18 17:33:05
>>107
>加えて言うと、調べる気がなさそうな人間に対しては
>いくらマゾヒストでも親切でも教える気になれんよ
回答したいやつが回答すればいい。
回答したくないやつは黙って無視しとけばいい。 ここはもともとそういう場所。
調べる気がなさそうな人間がいれば、キーワードを教えてぐぐることを薦めるだけのこと。
その程度でカリカリするなら、こんなスレ見ない方がいいよ。ストレスたまるだけだから。
110:デフォルトの名無しさん
09/09/18 17:33:55
>>108
Windows関連のスレで聞いたほうがいいかも。
111:見習い ◆YG1xRh8M6Ffb
09/09/18 18:02:45
>>110
ありがとうございます
windows板の質問スレッドで回答待ちです
112:デムパゆんゆん
09/09/18 18:11:39
おう、がむばれ!
113:見習い ◆YG1xRh8M6Ffb
09/09/18 19:16:05
スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
でも作業フォルダにはこれと同じファイルがありません
意味がわからないのですが・・・
どういうことですか?
114:デフォルトの名無しさん
09/09/18 19:19:55
>>113
ruby本体だって作業フォルダにないだろ。それと同じだよ
環境変数PATH、コマンドプロンプトとかでググってみたら
115:見習い ◆YG1xRh8M6Ffb
09/09/18 19:21:22
恐らくボクの言っていることが通じてないとおもいます
ボクの説明が悪いです
すいませんね
116:デムパゆんゆん
09/09/18 19:28:29
どうせならLinuxでやろうぜ。
117:見習い ◆YG1xRh8M6Ffb
09/09/18 19:32:36
もっていません
118:デフォルトの名無しさん
09/09/18 19:34:49
>>115
通じてないと思うのならあやまる前に通じさせる努力をしてくれよw
何がわからなくて何を知りたいのか、回答者が推測しなければならないような
質問はよくない、というかかなり損してるよ
119:見習い ◆YG1xRh8M6Ffb
09/09/18 19:36:36
>>29さんはいませんか?
いらっしゃいましたら方法をおしえてください
120:見習い ◆YG1xRh8M6Ffb
09/09/18 20:01:57
>>118
こんな感じでよろしいでしょうか
OSはwindows xp sp3 32bitです
rubyはActiveScriptRubyの最新版1.8.7をインストールしています
デスクトップのショートカットアイコンを”変更”したいのですがその方法がわかりません
自分なりにいろいろがんばってみたのですが力不足のようです
もし知っている方がいらっしゃいましたらご教授いただければ幸いです
ご指導の程よろしくお願い致します
121:デフォルトの名無しさん
09/09/18 20:17:33
>>120
その話はWindows板で回答待ちじゃないのか?
>>113-114の流れはおかしくないと思うが、直後に>>115,120となる意味が分からん
122:見習い ◆YG1xRh8M6Ffb
09/09/18 20:22:41
もういいです
123:デフォルトの名無しさん
09/09/18 20:23:53
>120
Windows板で回答待ちの質問をこっちに持ってくるなよ
向こうの住人に失礼だぞ
124:見習い ◆YG1xRh8M6Ffb
09/09/18 20:24:29
流れがどうのこうの
聞いてるんだから
可能か不可能かくらいは
こたえてくれても
いいんじゃないの
125:デフォルトの名無しさん
09/09/18 20:27:32
RubyプログラムでWindowsでのショートカットのアイコンを変更したいというんだったら
WIN32APIでも叩けば「可能かもしれない」。
俺はやったこと無いから知らないけど、詳しい人が答えてくれるかもね。
Rubyのショートカットアイコンを変更したいという話だったら「可能」だけど
スレ違いだから出て行けって言われてる。
126:デフォルトの名無しさん
09/09/18 20:29:36
>>113
>スタートメニューのすべてのプログラムのRuby1.8の中にruby consoleがあります
>でも作業フォルダにはこれと同じファイルがありません
>意味がわからないのですが・・・
意味が分からないのはキミの質問のほうだな。
Windowsがないから正確なことはわかんないけど、
「スタートメニュー」> 「すべてのプログラム」>「Ruby 1.8」
の中に「ruby console」というのがある、ということがいいたいのか。
しかし「作業フォルダにはこれと同じファイルがありません」という部分は意味がわからん。
再提出!
127:見習い ◆YG1xRh8M6Ffb
09/09/18 20:29:54
アイコン変えるくらいで
えらいたいそうなことやね
あきらめますわ
ありがとう
128:デフォルトの名無しさん
09/09/18 20:39:34
1. まずruby consoleってのを削除する
2. パスを通す
3. 普通にコマンドプロンプトを使う
129:デフォルトの名無しさん
09/09/18 20:45:02
アイコンとかどうでもいい事にこだわるのはマカ。
ルビー使いたいなら教祖も使ってるデビアン推奨。
130:デフォルトの名無しさん
09/09/18 20:45:18
アイコンを右クリック→プロパティ→カスタマイズ→アイコンの変更→好きなのに換える
131:デフォルトの名無しさん
09/09/18 20:46:54
ショートカットの場合は「カスタマイズ」を「ショートカット」に読み替えてね。
132:デフォルトの名無しさん
09/09/18 20:48:45
あれは許容範囲を超えたダサさだからなあ
GRScript18.dllのリソースを書き変えたらいいんかな
真面目な話、アイコンをartonに送るというのが真の解決法だ
133:デフォルトの名無しさん
09/09/18 21:09:34
初心者さんがだんだんグレて来ててワロタ
134:デフォルトの名無しさん
09/09/18 21:29:21
そろそろ悪態をつくころだね
135:デフォルトの名無しさん
09/09/18 22:20:56
>>130-131
アドバタイズショートカットなめんな
136:デフォルトの名無しさん
09/09/18 23:19:34
ひまなおっさんの釣りなんじゃないかと思えてきた。
日本語がおかしいし、いくら初心者でもこれはないだろ。
あるいはリアルに小学生なのか。
137:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 23:29:04
まずはうんざりするくらいまで each 使い倒せ
Enumerable や Array の各メソッド内部でどう each が使われているか推測できるようになれば
いちいち他人に聞かなくても一発で書き下せる
特殊動作のメソッドだけ聞きかじりで使ってても応用できないぞ
139:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/18 23:50:05
>>139,140
非破壊的にやるとすればどうする?
142:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/19 00:01:59
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
144:デフォルトの名無しさん
09/09/19 00:01:59
arr2 = arr.map{|a| b = a.dup; b[1] *=2; b}
145:デフォルトの名無しさん
09/09/19 00:28:11
>>142,144
なるほど。ありがとう。
146:デフォルトの名無しさん
09/09/19 00:33:02
>>139>>142
方言わらたw
147:デフォルトの名無しさん
09/09/19 00:52:29
>>142
初心者スレではそういうのやってほしくないなあ。冗談を冗談と見抜けないのが初心者なんだから。
しかも冗談としてもつまんないし。
148:デフォルトの名無しさん
09/09/19 06:34:59
Marshalとかw さすうがに冗談も大概にしろよw
149:デフォルトの名無しさん
09/09/19 07:11:56
>>148
君の釣りはつまらない
Marshal.dump+load は dup の shallow copy で済む今回は牛刀だが手段としては妥当だ
150:デフォルトの名無しさん
09/09/19 07:48:50
>>149
なぜ、Marshalを使う必要があるかわからん。dupですむなら、それにこしたことないのではないか
151:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/19 08:17:24
>>151
だったら>>142の段階で簡単な説明をつけましょう。
なぜMarshalを使ったのかという説明がないため、初心者は理解できないし他の人も混乱するだけです。
ここは初心者のための回答が期待されるところであり、初心者が理解できない回答を書いて「Marshal使ってるオレかっこいい」とひたる場所ではありません。
スレの趣旨を理解しましょう。
151が142と別人だったらごめんね。
153:デフォルトの名無しさん
09/09/19 08:32:23
俺もちょっと不思議に思ったからググってああなるほどと思ったクチだが
別に「Marshal使ってるオレかっこいい」じゃないだろw
Ruby本でも書かれるような一般的な小技なんだろ
まあ上でも言われてるが初心者にネタを見抜けってのはきついから
ネタなしかネタだと明らかに分かるよう書いてほしいのはあるが
154:デフォルトの名無しさん
09/09/19 08:37:29
>>152
知らんよ
Marshal.load して dump するというのは「はいれつがこぴーできません」に対する FAQ だ
きちんとマニュアルにも書い…書…注釈に小さく書いてある
URLリンク(www.ruby-lang.org)
知っていることも使用することも問題は特段存在しない
Marshal.dump を知っているレベルで for や定数を使うことが「ありえない」から叩かれてるのだろ
155:デフォルトの名無しさん
09/09/19 08:39:34
Array や Hash の複製が欲しいときにいつも歯がゆく思うんだけど
なんで Object には deep copy のためのメソッドがないのかな?
サブクラス作るたびに適切にオーバーライドする必要が出て面倒だからだろうか
156:デフォルトの名無しさん
09/09/19 08:56:27
>>155
実際にRubyスクリプトとして作るとわかるが循環解決でわけわかめになる
marshal.のソース流用しようとするとT_DATAであっぴゃーになる
dumpしてloadよりも早くてうまくて短い実装があるならMLで発表だ
基本、ディープトラバースして欲しくないらしいぞ
Rubyで提供されてるディープトラバース手段はMarshalだけだ
Marshalできないやつはそもそも複製できんオブジェクトだったということで
157:デフォルトの名無しさん
09/09/19 09:23:29
怖いからYAMLにして戻すってのは?w
158:デフォルトの名無しさん
09/09/19 09:30:36
>>154
>知っていることも使用することも問題は特段存在しない
問題はそこじゃない。初心者への回答という観点を忘れ、ろくに説明もなしにコードだけ書いて満足していることが問題。
159:デフォルトの名無しさん
09/09/19 09:39:28
dump が目的の場合に Marshal ではなく YAML を使うメリットはゼロ
160:デフォルトの名無しさん
09/09/19 09:40:25
>>158
説明はされた
161:デフォルトの名無しさん
09/09/19 09:56:20
説明しなくても分からなきゃ自分で調べるだろ
162:デフォルトの名無しさん
09/09/19 11:16:12
>>160
あとからな。ここでいっているのは、最初の>>142の時点で何の説明もないことだろ。
163:デフォルトの名無しさん
09/09/19 11:26:23
どうしてもMarshalに突っかかってるようにしか見えないが
そこは全く問題ないだろ
forの方を言うならまだわかるが
164:デフォルトの名無しさん
09/09/19 11:33:22
なんか一人顔真っ赤にして頑張ってる姿が目に浮かぶんだが
>>147が>>139,142のようなのは初心者に有害だからやってほしくないと真摯に考えるのなら
その場で「Rubyでforは滅多に使わねえよカスeach使え」
「大文字で始まる識別子は定数だからLとかそんな風に使うなボケ」
「巣に帰れ二度と戻ってくるな」といったツッコミをいれるべき
165:デフォルトの名無しさん
09/09/19 11:45:02
Marshal を知らなかったのが悔しくて悔しくて悔しくて悔しくて悔しくてたまらないのだろ自称脱初心者が
166:デフォルトの名無しさん
09/09/19 12:02:02
>>164は、>>142での説明がないのに「説明はされた」とほざいている>>160の必死の答弁でした。
160先生の次回作をお楽しみに。
167:デフォルトの名無しさん
09/09/19 12:05:26
どっちが必死なんだよw
168:デフォルトの名無しさん
09/09/19 12:06:17
マジ顔真っ赤だなあ・・・w
説明がないと思ったなら他の人が説明するもよし
分からなきゃそれを質問するもよし
だろう
169:デフォルトの名無しさん
09/09/19 13:40:16
ごめん、俺がMarshalなんて・・・っていったばっかりに、こんなことに(´・ω・`)
ごめんなさい、ごめんなさい。双方とも頭冷やしてくだしあ
170:デフォルトの名無しさん
09/09/19 13:44:38
いや、Marshalは正しい解答の一つでしょ
あやまるならforとか定数とか変に使ったことをあやまってくれよw
まあ(ちゃんとした)議論になればいろんな情報が出てくるからいいのかもしれんけどね
171:デフォルトの名無しさん
09/09/19 13:58:09
>>142で既にあやまってるなw
172:デフォルトの名無しさん
09/09/19 14:23:19
"[hoge]"とか"{hoge}"みたいな文字列の前後の括弧を取り外すのに
"[hoge]".sub(/\[(.+?)\]/){$1}
なんかじゃなくて、なんかもっとスマートな方法はありませんか?
173:172
09/09/19 14:26:22
できれば
"[hoge]".split(//)[1...-1].join
も無しの方向で。
174:デフォルトの名無しさん
09/09/19 14:28:01
"[hoge]"[1...-1] では駄目と申すか。
175:デフォルトの名無しさん
09/09/19 14:36:42
String[] の動作が期待に添っていて、短いのがスマートだと勘違いしているのなら、>>174
そのまんまの正規表現でマッチした部分を取り出す以上のわかりやすいスマートなものはないかと思われ
str =~ /\A[\(\{\[<](.+?)[\)\]\}>]\Z/; $1
開きカッコの対応を取るライブラリは標準では無いので自作してくれ
176:デフォルトの名無しさん
09/09/19 14:38:04
というかカッコの対応は正規表現では本来書けない。
とCマガで大昔に読んだけど、最近の拡張しまくりのだと可能かもなー。
177:デフォルトの名無しさん
09/09/19 14:48:30
後ろの1文字はchopで毟れるけど、先頭の1文字を毟り取るメソッドっ
てないよな。
178:デフォルトの名無しさん
09/09/19 14:51:08
>>177
その手があったか
"[hoge]".chop.reverse.chop.reverse
179:デフォルトの名無しさん
09/09/19 14:52:59
>>178
ちょwwwwwプwwwww
180:デフォルトの名無しさん
09/09/19 14:54:21
小橋の回転チョップを思い出した
181:デフォルトの名無しさん
09/09/19 17:26:08
右のほうをチョップされたら左のほうを差し出せ
182:デフォルトの名無しさん
09/09/19 20:20:22
×ほう
○ほお
183:デフォルトの名無しさん
09/09/19 20:28:43
>>172
"[hoge]"[/\[(.+?)\]/, 1]
とも書ける。
>>175
Onigurumaならできるはず。
184:デフォルトの名無しさん
09/09/19 21:00:13
すんません。このスレどっからドコまで自作自演なんてしょうか?
185:デフォルトの名無しさん
09/09/19 21:06:16
ココまで俺の自演
186:デフォルトの名無しさん
09/09/20 05:42:36
require ってなんで複数のライブラリ名を受け付けないんでしょうか。
けっこう不便なんですけど。
187:デフォルトの名無しさん
09/09/20 05:58:31
>>186
リファレンスを見たらわかることではないでしょうか?
188:デフォルトの名無しさん
09/09/20 06:35:34
書いてはあるが、意図を読み取るのは不可能だと思う
>>186
require が真偽値を返すメソッドとして作られているから、がいちおうの答
複数受け取ったときは真偽値の配列を返すようにしてもいいんだけど、おおむねキモい
each で回してもいいはずなんだけど、そういう人はなぜか見ないね
189:デフォルトの名無しさん
09/09/20 06:46:28
かなり初期に一瞬だけ実装されたことがあったと記憶
false が返ってきたほうが便利だということでお流れになったんでなかったかな
190:デフォルトの名無しさん
09/09/20 07:50:00
ふとした疑問なのですが、Mechanizeのテストというのはどのように書いたものでしょうか?
191:デフォルトの名無しさん
09/09/20 08:22:58
>>190
FakeWeb 1.2.6 API Documentation
URLリンク(fakeweb.rubyforge.org)
FakeWeb使ったらいけるかも…
192:デフォルトの名無しさん
09/09/20 11:46:12
test
193:デフォルトの名無しさん
09/09/20 11:51:53
>>192
それはRubyで作った2chブラウザのテストですか?
194:デフォルトの名無しさん
09/09/20 12:34:04
186です。
>>188
なるほど!たしかにrequireは戻り値がありますね。でも戻り値を気にする場面っていうのはまれなので、
そういう理由で複数の引数を指定できないのはちょっと勿体ないですね。
Railsとかには require_all というのがあるそうなので、戻り値を気にしなくていいから
引数を複数とれるバージョンのrequireを、requireとは別に用意してほしいなと思いました。
195:デフォルトの名無しさん
09/09/20 12:34:37
yes,we can
196:デフォルトの名無しさん
09/09/20 12:59:39
>>194
なければ自分で作るという選択肢ももとう
197:デフォルトの名無しさん
09/09/20 13:01:42
require を再定義すればいい。
198:デフォルトの名無しさん
09/09/20 16:09:37
\
..  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/\(<●>)/\ /\(<●>)/\
/\(<●>)/\ /\(<●>)/\
/\(<●> )/\ \(<●>)/\
/ \\(<●>)/\
/ ,ゝ===く <●>)/\
! γ `ヾ,_ \
│ :く( r,J三;ヾ )> \
l =; {三●;= } ,=ニ l
ヽ ゝ≡三=イ / <>>1ワロタw
ヽ .,,,. /.|
ヽ 'ぐ'''''''' / / ト,
ヽ. ヾ''" / / |ヽ
,./ヽ `´ / ./ \、
-‐ '''"  ̄ / :| \,,,__,,,, / / | `'''‐- 、.._\
199:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/20 17:25:56
>>199
idの所が変になるんじゃなくて、cgi['syashin']以降が変になってるはず
blobとかのバイナリオブジェクトは文字列の連結でSQLを作れない
プリペアードステートメントとかを使え
201:デフォルトの名無しさん
09/09/20 17:56:53
blobじゃなくても普通プリペアードステートメント使うとこだろ
202:デフォルトの名無しさん
09/09/20 18:41:08
何で空配列がかえってくんねん
空文字列ちゃうん?
>> "a".split(/a/)
=> []
>> "aa".split(/a/)
=> []
>> "ab".split(/a/)
=> ["", "b"]
203:デフォルトの名無しさん
09/09/20 18:43:58
空配列に空文字列がつっこまれるべきちゃうん?
[""]
204:デフォルトの名無しさん
09/09/20 18:57:36
>>194
%w(lib0 lib1 lib2).each{|feat| require feat}
でいいじゃん
205:デフォルトの名無しさん
09/09/20 19:12:10
>>202-203
新リファレンスマニュアルから抜粋
> instance method String#split
> split(sep = $/, limit = 0)
> 第 2 引数 limit は以下のいずれかです。
> limit == 0
> 分割個数制限はなしで、配列末尾の空文字列を取り除く
> limit < 0
> 分割個数の制限はなし
「配列末尾の空文字列を」いくつあっても全部「取り除く」ってことなんだろうな多分
それがデフォルトの動作である理由は知らん
206:デフォルトの名無しさん
09/09/20 19:23:06
> 「配列末尾の空文字列を」いくつあっても全部「取り除く」
こんなん知らへんかったがな。おーきに
理由は実装上の都合なんやろなぁ
207:デフォルトの名無しさん
09/09/20 19:33:54
Perlがそうだったから。
Perlがそうだった理由は知らん。
208:デフォルトの名無しさん
09/09/20 22:23:37
>>206
web上では関西弁禁止だよ?知らないな?他の方言ならいいけど
209:デフォルトの名無しさん
09/09/20 22:53:07
>>199
syasinじゃなくてphotoとかpictureつかえ
210:デフォルトの名無しさん
09/09/20 23:01:59
1.9からThreadにかわりFiberというのが入ったそうですが、どうやって使うものでしょうか。
ぐぐってみたけど、上級者向けの説明しかなくてさっぱりでした。
例:Fiberはいわゆるコルーチンです。←コルーチンが何かわからないからさっぱり理解できない説明
高校生でもわかるような説明をどなたかお願いできますか。
211:デフォルトの名無しさん
09/09/20 23:13:30
>>200-201
Ruby/MySQLではプリペアードステートメントつかえない?
MySQL/Rubyじゃないとだめ?
212:デフォルトの名無しさん
09/09/20 23:17:15
>>210
Threadなくなったわけじゃないし、上級者(地雷踏み?)向けの機能だから忘れていいよ
否定的なこと言われてるし
URLリンク(blade.nagaokaut.ac.jp)
213:デフォルトの名無しさん
09/09/20 23:58:30
>>211
こんなのもある
URLリンク(d.hatena.ne.jp)
214:デフォルトの名無しさん
09/09/21 00:21:13
>>211
出来るみたいだけど使ってないんで確認はしてない
URLリンク(planet.mysql.com)
stmt = my.prepare("select ?,?")
stmt.execute 123, "abc"
stmt.fetch # => [123, "abc"]
215:デフォルトの名無しさん
09/09/21 00:43:01
refe2簡単に入れたいけどパッケージとかある?
216:デフォルトの名無しさん
09/09/21 00:58:24
そんなに面倒なことはない気がするんだが
217:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/21 03:42:41
MySQLの本でも買えよ・・・またはRails使うか
219:デフォルトの名無しさん
09/09/21 04:02:16
>>217
エラーメッセージの意味はわかる?
SQL文を実行したけどresult setが返されなかった、なのに行を読み込もうとしてエラーになっている、という意味。
SQLをみるとupdate文を実行しているよね。だからresult setは返ってこない。なのに st.fetch しようとしているからエラーになっているだけ。
これがselect文だったらfetchできるけど。
220:デフォルトの名無しさん
09/09/21 11:47:02
>>219
SERECTしたらはいってた~~!!
ありがと~~!!!
表示のほうも、相談にのってください
格納したデータを
<img src="data:image/jpg;base64,/9j/4AAQ....中略.....">
って感じには表示できるのですが
これだとIE6では見れない。
エンドユーザにFF入れろとか言えないし
IEでも表示させる方法ありますかね?
221:デフォルトの名無しさん
09/09/21 12:24:04
もはやRuby関係なし
222:デフォルトの名無しさん
09/09/21 12:41:30
どうみてもHTMLの質問です
動的か静的かは用途次第だけど、素直にURL割り当てろって
223:デフォルトの名無しさん
09/09/21 12:54:14
スレリンク(tech板)
スレ立てるまでもない質問はここで 100匹目
スレリンク(tech板)
【漏れは】猫でもわかる質問スレ【猫以下です】
224:デフォルトの名無しさん
09/09/21 13:26:50
>>220
アホだなぁ。
base64デコードして出力すればいいだろが。
Content-Typeヘッダも適切に吐いてね。
あ、スレチだね。
225:デフォルトの名無しさん
09/09/21 13:51:04
>>220
さすがにスレ違いすぎるけど。
src="data:..." は IE6 ではサポートされてない。これはブラウザを変えてもらう以外に方法はない。
だから data: を使わずすなおに画像を別ファイルにしておこう。
あるいは URLリンク(example.com)(base64文字列)....
が画像ファイルを返すようなCGIを用意して、
src="data:..." をすべて src="URLリンク(example.com)" に変換するとか。
226:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/21 18:59:21
アホなりに解決しました。
どうもbase64のコードが長すぎでうまく行かなかったっぽいので
idを指定してDBから画像を引っ張って垂れ流すだけのCGIを作成しました。
idなら長くても50桁とか行かんので、これで解決!!
いろいろ、ご迷惑おかけしました。
ヒント本当に助かりました。ありがとうございます。
228:デフォルトの名無しさん
09/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 || ""))
詳しくは
URLリンク(blog.s21g.com)
をみてくれ。
229:デフォルトの名無しさん
09/09/21 20:00:17
いやいや、というか
そんな巨大なデータをクエリ文字列としてURIで渡すなよ、と。
230:デフォルトの名無しさん
09/09/21 20:02:48
URLの長さ上限は、普及しているブラウザでは、一番短かいIEが
2083バイトだったかね。
231:デフォルトの名無しさん
09/09/21 20:04:53
一発でroot奪取されかねない素敵コードだな
232:デフォルトの名無しさん
09/09/21 21:06:05
なんかワロタw
233:デフォルトの名無しさん
09/09/22 14:17:19
ルヴィーっておもしろいですか?ルヴィー使ってる友達が、開発者が日本人だから誇らしいと言ってました
234:デフォルトの名無しさん
09/09/22 14:23:06
>>233
またお前か。
もういいから自分の巣に帰れ!
235:デフォルトの名無しさん
09/09/22 15:31:24
URIのやり取りでトンネル掘り出すアフォとか出てきそうだな。
236:デフォルトの名無しさん
09/09/22 19:39:02
$0とか__FILE__とかARGFとか・・・
最初から備わってる変数が色々ありますけど、どうしてこんなに表記法に統一性が無いのですか?
237:デフォルトの名無しさん
09/09/22 20:31:24
変数
238:デフォルトの名無しさん
09/09/22 21:03:37
>>236
Larry Wallに聞いてくれ
239:デフォルトの名無しさん
09/09/22 21:08:08
Larryにそんなことを聞いたら
Perlの文法が言語学的にどう優れているのかの講義が始まるぞ
そしてハッシュの頭になぜ%が付くのかを聞いたらPerl信者になること確実だからやめておけ
240:デフォルトの名無しさん
09/09/22 21:28:45
$0はsh
__FILE__はC
ARGFはARGVの発展系、ARGVはCのmain関数の引数argvが元になっている
どれもこれもunix+Cを知ってれば、なじみの物ばかりだ
241:236
09/09/22 22:02:34
ありがとうございます。他言語からの習慣に習って付けてるんですね。
でもARGFはどうして定数なんでしょうか?Cだとargvなんかは変数ですよね。
__FILE__は擬似変数で$0はグローバル変数と全部違うけど、どれもグローバルにアクセスしたいものだから
統一してしまえばいいのに、と思ったのです。
ここら辺の、定数やグローバル変数、擬似変数といった使い分けは実装内部のことが分かるような人じゃないと理解できないのでしょうか。
242:デフォルトの名無しさん
09/09/22 22:06:29
ARGFは大文字で始まる
__FILE__は違う
243:デフォルトの名無しさん
09/09/22 22:08:10
定数だったNILが変数nilになったりしてるから絶対的な境界は無いんだろう
ARGFをグローバル変数にするのはおかしな話だが、何でといわれても説明できん
244:デフォルトの名無しさん
09/09/22 22:23:44
ARGFはARGVの発展系、ARGVが大文字でグローバルなのは多分awkが元
他の言語もそれに習ってるからrubyもそれに習っているんだろう
245:デフォルトの名無しさん
09/09/22 22:27:10
>>241
どこかでMatzが
「特殊変数周りの仕様はPerlから引きずった。今では後悔している」
的なことを書いてたような
いずれにせよ、一貫性がないという意見には同意
246:デフォルトの名無しさん
09/09/22 22:41:46
Perlからの脱却
ってのがRubyの精神じゃなかったっけ…
247:デフォルトの名無しさん
09/09/22 22:44:06
Ruby2.0では特殊変数は一新するんじゃない?
248:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/22 23:43:38
色々と突っ込みたい所はあるが、まずはtmpdirにセッション情報が書き込まれたファイルが存在しているかどうかを確認するんだ。
250:デフォルトの名無しさん
09/09/22 23:48:07
ファイルが作成されているのが確認できました。
リロードするたびに増えていきます。
サーバー側の問題でしょうか?
251:デフォルトの名無しさん
09/09/22 23:58:52
ようし、じゃあ次はFirefoxにFirebugを入れてcookieの受信と送信ができているか確認するんだ。
CGIモジュールの仕様はよく知らんが、きっとセッションIDをクッキーに入れて送ってきてくれているはずだぞ!
252:デフォルトの名無しさん
09/09/23 00:15:52
クッキーのリストが反応しないみたいです、他のサイトだとExpiresの項目にsessionというのが出てきています。
253:デフォルトの名無しさん
09/09/23 00:50:05
で、セッションを発行したときのレスポンスヘッダにSet-Cookieはあったのか?
254:デフォルトの名無しさん
09/09/23 00:58:52
まじキチ…ユダヤが人工地震を起こすぞ
【緊急情報カクサンよろしく】
ついに来ました。
大きい動きです。250nT超えてきました。ほぼ間違いありません。もう一度言います。
友人、知人、親類縁者、あらゆるつながりを駆使して巨大地震がくることを教えて下さい。
四川地震より大きいのが来る可能性があります。
URLリンク(g)<)★253494015/
【大気イオン】e-PISCO Part11【また延長】
スレリンク(eq板)★252991726/
本当に地震が来たら、犯人は特権階級全員だということ2
255:デフォルトの名無しさん
09/09/23 01:01:28
すいませんレスポンスヘッダを確認することができませんでした。
Firefoxのコンソールで確認できるような事を書いてあるサイトを見つけたのですが
うまく確認できませんでした。
256:デフォルトの名無しさん
09/09/23 01:04:36
>>2555
Firebugでの見方がわからんならLive HTTP Headers入れろ。
257:デフォルトの名無しさん
09/09/23 01:17:14
ありがとうございます、インストールしてみました。
レスポンスヘッダにCookieと名前のつく項目はなかったです。
258:デフォルトの名無しさん
09/09/23 01:20:23
じゃあそれが原因だろw
ってかCGIクラスのインスタンスって何度も生成したらバグるんじゃないの?
関数の中でインスタンス作成して、破棄しているあたりからして使い方が間違ってるんじゃないのかと。
259:デフォルトの名無しさん
09/09/23 01:26:40
なるほど、少し簡単なプログラムを作って実験してみます。
rubyは明確なルールが分かりづらくて難しいですね。
ありがとうございました。
260:デフォルトの名無しさん
09/09/23 01:32:05
問題はHTTPの理解のほうじゃないだろうか。
261:デフォルトの名無しさん
09/09/23 01:46:05
>>248
たんにHttpヘッダーを送信してないだけかも。
「ruby cgi session」でぐぐったら、こんなページがあった。
URLリンク(d.hatena.ne.jp)
参考にしてみて。
262:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/23 07:51:45
どうしても分からなければ
ソースをまるごと貼り付けて、アドバイスを求めるという手もある
もちろん自力で解決できるならその方がいいけど
264:デフォルトの名無しさん
09/09/23 08:05:08
2chに投稿するとインデントがなくなってすごく見にくいんだけど、JaneStyleのリンクポップアップで
見るとちゃんとインデントされてる!
それをコピーしたらインデント付きでコピーもできる!
全角スペースや によるインデントを使う必要なし!
265:デフォルトの名無しさん
09/09/23 11:05:48
>>264
書き込み時に置換面倒なんだけど、ソースとリンクを毎回書き込むのが面倒なのだが
266:デフォルトの名無しさん
09/09/23 11:15:02
コードを貼付ける場合、どうせなら
URLリンク(pastie.org)
とか
URLリンク(gist.github.com)
とか使うといいんじゃないかな。
詳しくは URLリンク(journal.mycom.co.jp)
267:デフォルトの名無しさん
09/09/23 11:20:00
長い場合はそのほうが望ましいけど
短い場合はそのまま貼ってくれたほうがいいな
あとインデント類の扱いは2chブラウザごとに全然違うらしいよ
268:デフォルトの名無しさん
09/09/23 11:32:03
rubyのせいにしてるが、http知らないと実装は無理なんじゃ。
269:デフォルトの名無しさん
09/09/23 11:35:06
CGIも知ってないと無理な悪寒
270:デフォルトの名無しさん
09/09/23 11:38:57
アホばっかだな・・・
ソース張ってるんだからrubyが原因って一発で原因わかるだろw
271:デフォルトの名無しさん
09/09/23 11:52:44
正しくrubyをかくための
http,cgiの前提知識が足りないのかもしれん
272:デフォルトの名無しさん
09/09/23 19:47:00
Rubyって、GUIアプリを作れるの?
273:デフォルトの名無しさん
09/09/23 19:56:01
Ruby 自身は GUI 部品を持ってない
GUI 部品を司る他の言語や API を直接呼ぶ
一般論としては、GUI が目的なら Ruby を使う理由は何もない
素直に GUI 部品を提供する他の言語を使え
Windows でウィンドウを表示したけりゃ、そりゃ C# を使えばいいのさ
274:デフォルトの名無しさん
09/09/23 20:03:27
うわ 糞言語じゃん
275:デフォルトの名無しさん
09/09/23 20:05:01
>>274
GUI部品がどういうふうに成り立ってるか理解してないだろ、おまえ。
276:デフォルトの名無しさん
09/09/23 20:11:42
>>274
ま た お ま え か !
277:デフォルトの名無しさん
09/09/23 20:13:41
Ruby/Tkの不遇って本当なんだなあ・・・
278:デフォルトの名無しさん
09/09/23 20:24:45
>>277
Windows環境の俺に言わせると
ActiveTclを別に導入しなければならないあたりが原因
Exerbでまとめて配布できるWxRubyと比べて、いろいろ不便だ
279:デフォルトの名無しさん
09/09/23 20:29:24
Win32API経由なら「ActiveTclを別途インストールしてください」という必要もない
Tclの文法をわざわざ勉強する必要もない
アリモノ全部で賄える
280:デフォルトの名無しさん
09/09/23 20:33:10
One Click InstallerにはRuby/Tk最初から入ってなかったっけ
まあPythonでTkinter使ったら幸せになれそうなケース
281:デフォルトの名無しさん
09/09/23 20:35:56
ruby厨涙拭けよ
282:デフォルトの名無しさん
09/09/23 20:47:46
というかTkってけっこう大きいんだよね
必要な人だけ適当に別途入れて使って、というスタンスにしておいたら
実行環境持ってない人に配布するという場合のサポートがすっこんと抜けた
そこまでRubyでやらなくてもいいじゃん却って不便だろ、と思うんだけれど
283:デフォルトの名無しさん
09/09/23 20:48:31
あれ? どこか涙流すような流れになってたっけ?
284:デフォルトの名無しさん
09/09/23 21:05:57
jruby でいいじゃんじゃん。
285:デフォルトの名無しさん
09/09/23 21:09:32
pythonに標準添付されてるtkをrubyから使う事って出来るん?
286:デフォルトの名無しさん
09/09/23 21:18:26
Linux使ってるけど、Ruby/gtk2が便利。書きやすい。
シグナルまわりの書き方が好きだ。
287:デフォルトの名無しさん
09/09/23 21:36:19
>>279
? どういうこと?
dllファイルを直接呼べばいいってこと?
288:デフォルトの名無しさん
09/09/23 22:15:39
Win32APIでやれることだけでなんとかしろって意味だと思う
289:デフォルトの名無しさん
09/09/23 22:18:29
Win32API向けにヘッダファイルの翻訳やってくれたりするライブラリでもあるの?
290:デフォルトの名無しさん
09/09/24 07:36:30
gemのjsonライブラリって日本語まんま変換できないの?
UTF8で["ほげ"].to_jsonとかすると["\u307b\u3052"]とかなっちゃうんだけど
291:デフォルトの名無しさん
09/09/24 08:05:05
いやそれそのまんまだと思うのだが
irb> puts JSON.parse(["ほげ"].to_json)
ほげ
何か問題ある?
292:デフォルトの名無しさん
09/09/24 08:42:47
javascript内では日本語は直接記述しないとか、そういう話?
293:デフォルトの名無しさん
09/09/24 08:45:26
>>290
JSONの仕様としては変換するのが正しい。
ただ、それが日本人にとって便利かどうかはまた別の話。
ユニコードに変換させないオプションがほしいよね。
294:デフォルトの名無しさん
09/09/24 08:47:18
>>293
ごめん、ウソ書いた。「変換するほうが仕様上正しい」というのは間違い。
JSONでは文字列中に日本語をかけるはずだね。
295:デフォルトの名無しさん
09/09/24 08:49:10
機械が生成した JSON はたいてい Unicode エスケープで日本語が書かれてるぞ
仕様上はエスケープしても構わない(may)のでたいていのライブラリは自動エスケープする
そのほうがめんどくさくないからというのが積極的理由
JSON を生で読むなバカという意図が働いてるという気はせんでもない
296:デフォルトの名無しさん
09/09/24 09:34:48
便乗して質問
JSONやYAMLに変換したとき、日本語をそのまま出力してくれるライブラリって
AnJSONやYa2YAMLぐらいしか知らないんだけれど
他に同じことができるライブラリってないかな
297:デフォルトの名無しさん
09/09/24 09:48:05
Jsonて生で読むなっていうようなものなの?
生で読めるのもいいところの一つだと思ってたんだけど
298:デフォルトの名無しさん
09/09/24 10:45:45
クラス変数が定義されているかどうかを調べる方法ありますか?
299:デフォルトの名無しさん
09/09/24 11:18:24
class_variable_defined?
300:デフォルトの名無しさん
09/09/24 11:26:31
Perlでは複数の返り値(リスト)があって、必要のないものには、以下のようにundefと記述しますが、
my ($second, undef, $hour) = localtime;
Rubyではどのように書くものなのでしょうか?
def meth
return 1, 2, 3
end
a, ??, c = meth
301:デフォルトの名無しさん
09/09/24 11:46:53
>>296
Rubyでは知らない。
PythonのYAMLライブラリは、オプションでユニコードに変換する・しないが選べるんだけど、
同じようなオプションがRubyにも欲しいよね。
>>300
特に用意はされてないと思うので、いらない変数を指定するしかないんじゃないかな。
a, _, c = meth
とか
a, dummy, meth
とか
302:デフォルトの名無しさん
09/09/24 12:00:51
>>301
ダミー変数を使うしかないんですね。
了解しました。
303:デフォルトの名無しさん
09/09/24 12:31:35
>>299
古いオンラインマニュアルでは載ってないclass_variable_defined?!古いオンラインマニュアルでは載ってないclass_variable_defined?!じゃないか!
304:デフォルトの名無しさん
09/09/24 12:34:56
class_variable_defined? が載ってない HTML ヘルプ版マニュアルは持ってる
これでも一応 1.8.6 対応だったはずなんだが
まいっか
305:デフォルトの名無しさん
09/09/24 12:36:10
大事なことなので2回いいました
306:デフォルトの名無しさん
09/09/24 17:08:05
Mix-inが言語的にサポートされていると聞いてRubyに心ひかれてます。
とはいえまだ使ってませんが。普段はC++/Javaを使っています。
Mix-in するモジュールを A、その中で定義されているメソッドを foo
とすると、foo からは A を Mix-in した側のクラス C1 内のメソッドを
使うことができるんですよね?
そのクラス C1 をさらに継承して C2 としたらその C2 で定義した
メソッドも呼び出せるんでしょうか?
C++の仮想関数や仮想関数テーブルとのアナロジーで説明してくれている
ページってありませんか?
307:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/24 17:25:10
C++ の vtbl の仕組みでは説明できません。
Ruby の場合「頼んで答えられれば答える」ただそれだけです。
309:306
09/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
09/09/24 17:35:01
>>307 , >>308
ありがとうございます。分かってきました(気がします)。
RubyというかMix-inという以前に頭が動的型付けの言語に
慣れていないことが原因だったように思います。
>Ruby の include はこの検索順番表(の2番目)に自分を追加するだけのシンプルな機能
>継承もこの検索順番表(の2番目)に継承元クラスを追加するだけのシンプルな概念
その解説ですっきりしました。
ということは >>309 も当然可能で
複数のモジュールを Mix-in したりさらに継承を続けたりして
メソッドの名前が重複する場合には、要注意、
つまり include の順番も依存するということですね。
311:306
09/09/24 17:38:28
ということは言語仕様としてMix-inとしての制約を
課しているという点以外は Python の多重継承と
良く似ているなぁ・・・
どうしても業務が静的型付け・手続き型言語
べったりなんで、まだこっち方面(どっち?)は
指をくわえて見てるだけしたが、そろそろ。
312:デフォルトの名無しさん
09/09/24 17:40:18
Matzは恥ずかしい表紙の本でMix-inは多重継承って言い切ってたな
313:デフォルトの名無しさん
09/09/24 17:44:20
>>311 そんなあなたに Scala をどーぞ。
314:デフォルトの名無しさん
09/09/24 17:47:26
>>312
多重継承の形してないだけで、実際は多重継承だと思う
・ 自作以外を include すると地獄
・ 自作でも 2つ include するとわけわかめ
・ 下手に include せずにクラスメソッドとして単体利用すると異常に楽
とか一緒
315:デフォルトの名無しさん
09/09/24 18:12:17
弱めた多重継承には違いない
実装を共有しつつ、ダイヤモンド継承とか面倒な問題は生じなくなる
まあRubyの場合、今度は変数がぶつかる問題があるけど・・・・・
なんかSchemeの健全なマクロみたいに、
名前の衝突を自動回避できないのかね
316:306
09/09/24 18:26:57
>>315
モジュールのメソッドの中で自由にインスタンス変数作れちゃうんですよね
そうするとたしかに変数名は衝突しますね。
317:デフォルトの名無しさん
09/09/24 20:13:26
ま、>>315の言う通りだね。
多重継承には嫌な問題がたくさんあるけど、あれば便利な場面もある。
そこで、通常の継承は単一継承のみに制限した上で、多重継承したい場面のためにMix-inを用意してある、と。
この辺のバランスの取り方は、まさにRuby的。好き嫌いはあるとは思うが。
318:デフォルトの名無しさん
09/09/24 20:19:22
実際問題として include ってあまりしないよねえ
やろうと思えばできるって感じ
慎重に設計した上で組み込む必要があるから、あまり気軽ではない
あと NameSpace::Application を include NameSpace して使う人はトイレのドア開けた瞬間に漏れろ
319:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/24 20:41:52
Ruby のバージョンだけが問題なんだから RUBY_VERSION で場合分けすべきだよね
defined?(Encoding) は時々見るんだけど、何が目的なのかな
321:デフォルトの名無しさん
09/09/24 20:51:16
defined?(Encoding)って何がまずいの?
322:デフォルトの名無しさん
09/09/24 21:00:52
Encoding という名前のモジュールまたはクラスまたは定数が定義されていること、ということしか調べられないこと
>>319 のような問題が起こるし、Encoding という名前のクラスかモジュールがどこかに存在してさえいればいいとか
Encoding という名前のクラスにならほぼ確実に存在して動作も確定なメソッドがあるという問題でもないわけで
文字列のエンコーディング処理に本当に必要なのはナニかというと Ruby 1.9.1 なわけで、
じゃあ素直に 1.9.1 の存在をチェックしたほうが素直なんじゃね、ということに
323:デフォルトの名無しさん
09/09/24 21:19:57
>文字列のエンコーディング処理に本当に必要なのはナニかというと
つーか例えば>>319の場合ならforce_encodingの存在チェックをするほうがよくね?
324:デフォルトの名無しさん
09/09/24 21:27:53
ダックタイピングとして意味がありゃあな
325:デフォルトの名無しさん
09/09/24 21:38:25
エンコーディングではなさそうだけど:
1.9以降の機能と思ってバージョンでチェックしていたら
1.8.8にバックポートされたでござる、という場合を考慮すると
バージョンで全部OKというわけでもないだろうな。
ケースバイケースとしか。
326:デフォルトの名無しさん
09/09/24 21:43:06
いやそれでもそれはバージョンでチェックすべきだろう
Rubyのバージョン名と機能の関係はそんなにまでも信頼できない魔境ではない
ソース触れる人がアップデートすべきだ
327:デフォルトの名無しさん
09/09/25 09:01:16
ダッチタイピングに空耳した
328:デフォルトの名無しさん
09/09/25 15:43:22
だからRUBY_VERSIONで分岐すんなつってんだろ
Encodingで被るなら::Encodingとか
String.method_defined?(:encoding)とか
使えよ
329:デフォルトの名無しさん
09/09/25 16:03:28
ある機能を備えているかが定数の存在やメソッドの存在でしかわからないのが問題なのかな。
Open Classなのでいくらでも後から定数やメソッドを追加できるわけで。
かといって、Javaのパッケージみたいにドメイン名使って一意にするのも鬱陶しいけれど。
330:デフォルトの名無しさん
09/09/25 16:45:12
RUBY_VERSION 否定派は何も根拠がないのが笑える
331:デフォルトの名無しさん
09/09/25 16:54:42
やはり組み込みと添付は Std モジュールに全部入れておくべきだった
332:デフォルトの名無しさん
09/09/25 17:41:18
>>330
1.9の機能を模倣する外部ライブラリができるかもしれないし
Ruby実装だって今やMRI一択じゃない
それと機能の有無で分岐してくれた方が後で読んだときに意図がつかみやすい
といっても俺自身否定派でもないから好きにすればいいと思うよ
できれば1.9スレや本スレとか然るべき場所でやってくれればなお良い
333:デフォルトの名無しさん
09/09/25 17:47:57
涙拭けよ
334:デフォルトの名無しさん
09/09/25 18:12:41
配列の中にハッシュ作りたいんですけど不可能ですか?
335:デフォルトの名無しさん
09/09/25 18:16:30
irb> foo = [{"a"=>0, "b"=>1}]
=> [{"a"=>0, "b"=>1}]
336:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/25 18:27:42
>>336
それって全部同じ 'key' でも何か意味があるの?
keyは色々なものでってこと?
338:デフォルトの名無しさん
09/09/25 18:54:14
結局、Encoding関連で今まで出た案をまとめると
1. RUBY_VERSIONで分岐
2. defined?(::Encoding)
3. str.respond_to?(:force_encoding)
あたりが現実的な解か
339:デフォルトの名無しさん
09/09/25 21:03:11
>>336みたいなのは
{'title' => 'タイトル', 'author' =>'著者', 'date' => '日付'}
という固定フォーマットのハッシュを、何らかの理由で順番を保持したまま
深く考えずに適当に処理したいというときに時々見る
340:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/25 21:40:37
dataは配列でいいんじゃないか?
342:デフォルトの名無しさん
09/09/25 21:42:22
railsのソースコード読むとハッシュの上手な使い方が理解できるよネー
343:デフォルトの名無しさん
09/09/25 21:48:45
>>341
敢えて全部ハッシュにするという例なんじゃないのか
344:デフォルトの名無しさん
09/09/25 22:25:41
>>339
つまり1.9なら不要の発想ってことでおk?
345:デフォルトの名無しさん
09/09/25 22:32:52
1.9.1 (以降)でしか使わないスクリプトであるなら、ハッシュ入り配列は不要だな
普通にハッシュを each で回せばいい
個人的には Hash の順番保持は 1.9.3 くらいで唐突に無くなりそうな機能だと思ってて
これに依存したスクリプトはあまり作りたくないなあと思ってるんだが
346:デフォルトの名無しさん
09/09/25 22:39:09
え!Hashの順番保持されるようになったのか
347:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/25 22:51:52
どちらかというとネガティブな方向で話題になった気がする
順番記憶したら Hash じゃねえとか Rubyオワタ\(^o^)/ とか
349:デフォルトの名無しさん
09/09/25 22:57:26
確かにHashはあるキーに対応する値を保持するだけのものな気がするな
順番保持したいなら配列にしろ・・・・・
とこんな話もすでにさんざんしたわけか
350:デフォルトの名無しさん
09/09/25 23:13:16
Java風に言うなら単なるLinkedHashMapでしょ
単なるハッシュとして使う分にはそれでもいいし、
追加コストは定数だからRuby的には許容範囲だとの判断があったのだろう
351:デフォルトの名無しさん
09/09/26 00:16:02
標準でOrderedHashクラス作って、Hashの仕様が変更されてもOrderedHashだったら大丈夫って風にしないと
まったく意味ないんじゃないの?
352:デフォルトの名無しさん
09/09/26 00:16:16
ruby をスクリプトエンジンとして使用するフリーソフトを作ったんですが、
Artisticライセンスな windows 版 ruby ってありますか?
353:デフォルトの名無しさん
09/09/26 00:38:34
yugui氏が担当している間は大丈夫そうなイメージがある、なんとなく
最悪OrderedHash < Hashになったとしても
互換性が必要な場面でHash = OrderedHashとかしときゃいいんじゃねw
冗談はともかく、現時点であらかじめこうしてから利用するとか
class OrderedHash < Hash; end
順列が必要な連想配列だというのが明確になるし
obsoになったときの対応も比較的容易なはず
まあ俺はArrayクラスがArrayとQueueとStackに七変化するようなもんだと思うから抵抗はないし
消える心配も今のところしてない
354:デフォルトの名無しさん
09/09/26 00:42:41
Hashでも順番持ってた方が普通に便利なんだが
別に深刻な害があるわけでなし、何が不満なんだがさっぱりわからん
355:デフォルトの名無しさん
09/09/26 00:49:15
>>354
・性能落ちるかもしれない不安
・今後消えるかもしれない不安
だと思う
356:デフォルトの名無しさん
09/09/26 00:52:52
言語処理系としてのruby1.9独自仕様なのか、
それともプログラミング言語Ruby1.9の仕様と解釈していいのか混乱があるのでは
もし前者だとしたら、処理系依存には抵抗がある
ハチドリ本いわく
>Ruby 1.9 では、ハッシュの要素は、実装によっては挿入された順序で反復処理される。
う~ん・・・・・
357:デフォルトの名無しさん
09/09/26 01:19:10
>>355
性能というのが速度のことであれば逆に速くなった。
というか、だからこそ入った。
358:デフォルトの名無しさん
09/09/26 01:22:27
確かに列挙は早そうだな
359:デフォルトの名無しさん
09/09/26 02:14:22
実装依存じゃOrderedHashのつもりで使うのは御法度か
360:デフォルトの名無しさん
09/09/26 02:16:02
rubyの開発グループは本当に人材酷いな。Railsに全部任せちゃえよ
361:デフォルトの名無しさん
09/09/26 02:36:06
いやいやRailsの人たちに任せたら新機能と非互換がTINYごとにどんどん増えるよ。
362:デフォルトの名無しさん
09/09/26 04:38:27
>>360
お前Rails使ってないか、あるいは使い始めたの今月だろ
363:デフォルトの名無しさん
09/09/26 05:31:14
来月には後悔するのか、流動性速すぎだろRails
364:デフォルトの名無しさん
09/09/26 07:24:58
Railsは、こっち推奨になりました→やっぱやめました→ごめん、やっぱこれ
とかバージョンアップのたびにあったりして笑うw
いや、使っている方としてはどっちだよ!とか思うけど
365:デフォルトの名無しさん
09/09/26 11:11:13
前田さんたちに頑張ってもらって、言語仕様で明文化してもらうまでは
Hashのキー順序については昔ながらの意識でいることにする。
366:デフォルトの名無しさん
09/09/26 11:28:47
JISの話なら、1.8ベースだから順序の保証は入らんと思うぞ
367:デフォルトの名無しさん
09/09/26 11:37:01
>>338
>>328のmethod_defined?も。
>>329
ある機能自体がある定数やメソッドで提供されてるんだから、最も自然だろう。
368:デフォルトの名無しさん
09/09/26 19:22:53
defined? や responsed_to? はダックタイピング用の機能であって
モジュール存在判定に使うもんではないと思う
369:デフォルトの名無しさん
09/09/26 19:48:38
むしろモジュールの存在を問わず
メッセージに応答できるか否かだけを問うべきでは?
370:デフォルトの名無しさん
09/09/26 19:54:42
実際に必要なのは処理結果であって返事そのものではないというのが理想と現実の深くて暗い谷間
371:デフォルトの名無しさん
09/09/26 20:01:47
>>368
ダックタイピングならそんな判定はしない
372:デフォルトの名無しさん
09/09/26 20:04:48
ていうかさあ、responed_to? 使ってる奴だって
その名前のメソッドを持っていることを期待してるのではなく
「Ruby 1.9 の」 force_encoding であることを期待しているんだろ
じゃあそれの条件をきちんと書けよ
373:デフォルトの名無しさん
09/09/26 20:08:05
>>372
期待していない不正なメソッドが動作した場合はたいてい例外が発生してプログラムが止まる
374:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/09/26 20:35:44
プログラムが止まったあと>>373がどう改修するのかにちょっと興味がある
どうせ基本雑談なので次の質問の方気後れせずにどうぞ
376:デフォルトの名無しさん
09/09/27 00:35:12
URLリンク(blog.livedoor.jp)
上のページに掲載されている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界隈で聞いてみようと思い書き込みしています。
何か分かりましたらご教授いただけないでしょうか。