[表示 : 全て 最新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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

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 の実装を提供することができるのか、
という質問です。

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は色々なものでってこと?






[ 続きを読む ] / [ 携帯版 ]

前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