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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
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のリンクポップアップで 見るとちゃんとインデントされてる! それをコピーしたらインデント付きでコピーもできる! 全角スペースや によるインデントを使う必要なし!
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 の実装を提供することができるのか、 という質問です。