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


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

Ruby 初心者スレッド Part 30



1 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 08:21:23 ]
プログラミング言語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を読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

485 名前:sage [2009/08/30(日) 00:10:43 ]
同一のテーブル構造をもつデータベースAとBがあって、
データベースの内容を比較したいです。

どちらのデータベースもSQLiteのファイルです。

ActiveRecordというのを使うのが簡単そうなのですが、
可能なのでしょうか?

というのは調べてみるとActiveRecordでは、
データベースへの接続(ActiveRecord::Base.establish_connection)とか、
レコードの検索を、クラスメソッドで操作しています。

となると、上記のように同一クラスから
別々のデータベースへ接続するインスタンスを作成して、
インスタンス経由で操作するという使い方はできないように見えます。


486 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:08:00 ]
>>485
SQLite3::Database.new(file)で両方のデータベース開いて
テーブル毎にレコードの比較した方が楽な気がする

487 名前:sage [2009/08/30(日) 01:38:36 ]
>>486
回答ありがとうございます。

SQL書かずにActiveRecordでできたら楽勝!
と思っていたのでなんとかならないかなーと。

488 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 07:42:50 ]
初めまして。

質問です。

今やってるプロジェクトが、以前、rubyのMVCフレームワークによって書かれました。
その開発した方が、/public_html/.htaccessで何らかの設定をしました。
今回、/public_html/manage/配下にphpのMVCフレームワークを使用して開発することに
なったのですが、/manage/.htaccessで設定しても親ディレクトリの.htaccessの影響を受けて
/manage/配下のファイルにアクセスしても、404になってしまいます。
/public_html/.htaccessの内容も分からず、なるだけ触りたくないのですが、
サブディレクトリの.htaccessで、親ディレクトリの.htaccessの影響を全く受けないようにすることは可能でしょうか。

お忙しいところ、すみません。
よろしくお願いします。

489 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:28:56 ]
Ruby 関係ねえ
.htaccess の書式勉強しろ

490 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:36:08 ]
Ruby関係ないからスレチ

> .htaccessの内容も分からず、なるだけ触りたくないのですが、

それを晒さないと。というより、せめて自分で読んでみないと。

491 名前:488 [2009/08/30(日) 10:00:38 ]
ご返信ありがとうございます。
サーバーを見てみたのですが、
/public_html/には、.htaccessがありませんでした。
ただ、404の設定がしてあるので、どこかでそのような設定がなされているものと思います。
/public_html/配下には、rubyのRailsで開発してあるようです。

/public_html/manage/には、今回のPHP開発に必要なcakephpのMVCフレームワークが設定してあります。
その.htaccessは、
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
</IfModule>
となっています。
例えば、domain.com/manage/css/layout.cssにアクセスした場合は、
/public_html/manage/app/webroot/css/layout.cssのファイルが読み込まれる設定にしてあります。
外のサーバー(public_htmlにrubyで設計したファイルが置いてないもの)で試したらちゃんと読み込まれていたので、/public_html/manage/配下は正しく設定してあるはずです。
しかし、domain.com/manage/css/layout.cssにアクセスすると、404が返ってきます。

/public_html/には、rubyのMVCフレームワークで設計されたファイルがたくさんあり、
私はrubyを知らないので、何かしらの設定がなっているはずなのですが、どこでどうなっているのか分かりません。

たぶん、domain.com/manage/css/layout.cssにアクセスしても、
cakephpのシステムは読み込まれず、元々のRuby Railsのシステムで処理されていると思います。
本来、domain.com/manage/ooo/xxx/ にアクセスすると処理されるのですが、
これも404に行きます。
でも、domain.com/manage/index.php/ooo/xxx/ とアクセスすると処理されます。

もし何かご存知でしたら、教えて頂けないでしょうか。
よろしくお願い致します。

492 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:01:02 ]
可能

493 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:05:08 ]
/public_html/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule manage\/$ manage/app/webroot/ [L]
RewriteRule manage\/(.*) manage/app/webroot/$1 [L]
</IfModule>




494 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:12:58 ]
てか Ruby 全く関係ねーということがわかってなお居座るのってなんなの頭悪いの

495 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:43:36 ]
>>494
自分で正しいことをしていると思っているイタイタイプ
周りでは陰で嫌われているのに気づかないタイプ

496 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:45:40 ]
自分の目的が果たされれば何をしても構わないと思ってるタイプ

497 名前:sage [2009/08/30(日) 12:54:11 ]
>>485です。

ActiveRecordで、ひとつのモデルで
複数のデータベースに接続するという
使い方ができるか、あきらめきれずにさらにググったところ、
magic_multi_connectionsというgemが見つかりました。

Magic-MultiConnections:
magicmodels.rubyforge.org/magic_multi_connections/

とはいえ、ActiveRecordが当初想定している使い方
ではないということがはっきりしました。

他にちょうどいいO/Rマッパってないですか?


498 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:59:58 ]
ソウダネ、IDナイカラ、ダレガダレダカサッパリワカラナイネ。

499 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 13:02:53 ]
>>497
自作のORe真っ裸ならあるけど

500 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 15:59:01 ]
>>491
すげーなー。
そのhtaccessファイルの中身の何がおかしいのかもわからない・調べられないのに、
Webアプリケーションを開発しようなんて。

恐ろしくて使いたくないぜ。

501 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:29:07 ]
>>497
テーブルの差異を調べるプログラム位、数十分で書けるだろ
二度と使わないかもしれないORMの調査に無駄な時間を費すの?

dbs = [file1,file2].map {|fn| SQLite3::Database.new(fn) }
dbs[0].tables.each do |table| # tablesなんてメソッドがあるとして
 results = dbs.map {|db| db.execute("select * from #{table}") }
 # results を比較
 :
end

502 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 16:37:20 ]
SQLを書きたくないんじゃなくて
書けないの間違いだろうな。。

503 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:42:22 ]
クエリに文字列埋め込みステキです



504 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:43:44 ]
何を言ってるの
ユーザーがSQLを直接発行するだなんて悪手中の悪手じゃないか

適当にうまくやるよボタンを押すだけで内部でSQLが組み立てられて
結果のデータのみがユーザーに返ってくるというのが正しいありかただろう

505 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:48:36 ]
>>504
そうなんだよねえ
結局SQLを書かせなければならないことになって深く絶望したわ
なんとかならんもんかね

506 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:52:28 ]
> SQLite3::Database.new(file)で両方のデータベース開いて
> テーブル毎にレコードの比較した方が楽な気がする

答えでてるじゃん。
終了

507 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 17:05:53 ]
Ruby使うまでもなくdumpしてdiffとればいいんじゃない。

508 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:07:16 ]
なんだろう。
>>501を信じてそのままドンってやって、ガツンと応答不能になり得たりしそうなこの不安感。

初心者スレでこれはありなんだろうか。
>>501の論旨からいうならもうちょっと、丁寧に逐次的に例を出す文脈ではなかろうか。

509 名前:501 mailto:sage [2009/08/30(日) 21:41:49 ]
>>508
俺に遠慮する必要は無い、君が教えてあげてくれ

510 名前:sage [2009/08/30(日) 22:44:10 ]
>>485です。

ActiveRecordではなくてSequelというのが
良さそうというのがわかりました。

Sequel:
sequel.rubyforge.org/

こんな感じで書けます。

DBLeft = Sequel.sqlite("./left.sqlite")
left_table_foo = DBLeft[:table_foo]

DBRight = Sequel.sqlite("./right.sqlite")
right_table_foo = DBRight[:table_foo]

left_table_foo.each do |left_rec|
# right_tableのレコードと比較する
end

なんかしつこく質問してしまったみたいですみません。
でも回答してくれて助かりました。では。


511 名前:デフォルトの名無しさん [2009/08/31(月) 01:39:52 ]
WinXPで1.8.6です。
文字列を16進ダンプしたものの中に、2バイト文字が含まれているか
どうかを判定するにはどうしたら良いでしょうか?

変換コードは下記の通りです。
arr0 = dataStr.unpack("H*")[0].scan(/[0-9a-f]{2}/)
arr1= arr0.to_s + "\n"

対象のdataStrが Rec の場合 arr1 が 52,65,63 になりますが、
Rク では 52,83,4e です。この場合、真ん中の16進数の83を元に
判定するのでしょうか?


512 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:47:10 ]
>>511
文字コード決めないと「2バイト文字」を定義できなくないか?

513 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 02:29:10 ]
>>512
ク で 83,4e です



514 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 02:36:12 ]
zenkaku=false
arr0.each do |c|
 if c>128 do
  zenkaku=true
 end
end


515 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 03:04:38 ]
>>511
NKF.guess

516 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 03:32:36 ]
globってなんであんな低機能なまま放置されてんの?

517 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 05:32:46 ]
cgiてなんであんな低能なまま放置されてんの?

518 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 06:20:02 ]
cgiは酷いね。参考にも成らない。
いい加減、政権交代の様に入れ替えるべき。

519 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 06:29:17 ]
cgiに関しては、政権交代!ばかりいってるだけだし民主党よりヒドイw

520 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 08:48:25 ]
>>518
ヒント:安定した候補者がいない

521 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:06:31 ]
候補者はいるだろ。その候補者を使えるレベルまでもっていくやつがだれもいないだけで。
WEBrickのcgiライブラリのことなんだけど。

522 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:14:12 ]
WEBrick::Sessionがないのはある意味象徴的

523 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:19:35 ]
これは何度でも言うが、作るだけなら立候補は何人もいるしいくつも作品があるんだよ
作るということとメンテナンスを引き受けるということとは全く違う

スレ違いだが



524 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:22:23 ]
>>523
>作るだけなら立候補は何人もいるしいくつも作品があるんだよ

いくつもあるとは知らなかった。
ぜひ紹介してくれ。

525 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:24:01 ]
ネット関連のライブラリは魔界だ
バージョン0.3まで行かずに放置されるのばっかじゃん

526 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:43:34 ]
Rackがバージョン1.0になって有力候補か? と思いきや
CGIで動かすと落ちるバグがあり、しかもなかなか修正リリースが出ないというオチ

527 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 09:48:25 ]
そんなに悪いところがわかってるなら自分で作ればいいじゃん

528 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:01:21 ]
みんな忙しい。

529 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:11:30 ]
出したコードにはコミュニティ上の責任もたんといかんのでな
書きっぱで後は知らん、というような人はどの世界でもノーサンキューだ

530 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:13:02 ]
口だけじゃないかw

531 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 12:16:14 ]
みんな忙しい。
みんな忙しい。




みんな忙しい。

532 名前:511 mailto:sage [2009/08/31(月) 13:04:08 ]
>>512-515
有難うございます。
514さんの方法を採用しました。


533 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:20:40 ]
Perl や Python の CGI ライブラリを移植するのはどうだろうね



534 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 13:52:18 ]
それは新しい実に新しい

535 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 14:36:41 ]
じゃあわかりやすいところで Perl の CGI.pm から始めようぜ

536 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 14:46:39 ]
(ぐるぐるぐる)
CGI.rb ができましたー

新しいスクリプトが欲しいんじゃなくて、スクリプトを継続的にメンテナンスできる人材が欲しいのよ
新機能をガンガン盛り込む人材ってのはとりあえずはコア近辺には要らないんだ

537 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:00:06 ]
だれだよお前

538 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:13:23 ]
>>536
>新しいスクリプトが欲しいんじゃなくて、スクリプトを継続的にメンテナンスできる人材が欲しいのよ

それどうやって判断するの?人材がいたとして、そいつがおまえのいう条件を満たしているかどうかって、だれがどうやって判断するのさ?
だいたい、CGI.rbなんてtDiaryでもHikiでもつかってるんだろうが。それだけユーザ数が多いのに担当できるだけの人材がいない/いなかったのかよ?
ほんとうに人材が欲しいなら、公式にアナウンスしろよ。このライブラリのメンテな求めてます、条件はこうこうです、と公式サイトに載せればいいだろ。
ろくに求人活動もせずに人がいないだの条件はどうのこうの、言い訳がましいわ。

539 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:16:54 ]
スレ違いの内容で長文とか勘弁
他でやってね

540 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 15:28:35 ]
>>538
じゃあお前やれよ。

541 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:45:00 ]
>>511

>>514 c>128 -> c>=128

542 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:47:00 ]
CGI.rbの上位互換wrapperがあればいいんだよね
oreoreCGIなら作ったけど

543 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:58:11 ]
>>542
あんまりよくないと思う
Rackの修正リリースが出て、標準添付になれば一番いい



544 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 17:55:47 ]
配列A1, A2, A3, ... Anから要素を1個ずつ取り出した結果を網羅した配列Xを作る。
・・・やってくれるメソッドなかったっけ?

545 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:06:46 ]
>>544
Array#transposeのこと?

546 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:16:27 ]
ありがとう、調べてみました。近いけど、違う。

p [[1,2],
[3,4],
[5,6]].transpose
# => [[1, 3, 5], [2, 4, 6]]

これが下のようになってくれたら期待通りなのです。
# => [[1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]]

547 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:27:24 ]
data = [[1,2],[3,4],[5,6]]
p data[0].product(*data[1..-1])

548 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:38:41 ]
てゆーか初心者はきちんとeach使え
小手先だけだと詰まるぞ

549 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:58:34 ]
>>548
そうかproductか!1.8.7から入ったんですね。それっぽいキーワードで
ググってもなかなか見つからなかった。どうもです。

550 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 19:11:53 ]
>>548
行列的操作関連はeach使ったほうがややこしくなりそうな気がする
転置行列は転置行列でしかないわけだし

551 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 19:40:28 ]
すまん網羅って見落としてた
それにしてもdata.productって書けそうで書けないのかw

>>548
eachで実装した方法を提示するならともかく
初心者に書かせるレベルにならないと思うぞ

552 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:25:47 ]
>>551
>eachで実装した方法を提示するならともかく
>初心者に書かせるレベルにならないと思うぞ
+1

553 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 02:34:28 ]
def cartesian_product(*data)
    raise if data.size < 2
    data.inject([[]]) do |product, items|
        product.inject([]) do |r, elem|
            r += items.map {|i| elem + [i] }
        end
    end
end



554 名前:488 [2009/09/03(木) 05:40:09 ]
無知ですみません。

自分なりに色々調べた結果、Passenger/mod_railsを使っているため、
/manage/の.htaccessが、それによって上書きされているようです。
/public_html/フォルダはRuby railsで開発されており、
今回、/public_html/manage/にPHPで開発することになりました。
私は、Rubyを全く知らない&.htaccess初心者なので、このような事態に陥っています。

RailsAllowModRewrite On
を使えば、なおるようなのですが、
/manage/.htaccessでそのように設定しても、/manage/.htaccessに設定してあることが
有効になりません。

どなたか知っていたら教えて頂けないでしょうか。
よろしくお願いします。

555 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:29:57 ]
>>554
板違い
pc11.2ch.net/test/read.cgi/php/1241100447/

556 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:37:34 ]
日本語もまともに掛けないのばかか

557 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 07:42:35 ]
弁護するわけじゃないが普通に分かる
おまえがRailsを分かってないだけだろ

558 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 11:00:02 ]
>>556
自己紹介乙

559 名前:newbie mailto:sage [2009/09/03(木) 12:46:12 ]
たのしいRubyを読み終わったんだが、謎が一つあります。

count = Hash.new(0)
...カウントにkeyとvalueを設定する処理(省略

count.sort{|a,b|
a[1] <=> b[2]
}.each{|key,value|
print "#{key}: #{value}¥n"
}

とあったとして、「<=>」という演算子が左右のオブジェクトを比較して、
<は-1
=は0
>は1
と返してくるのはわかったのだが、どうやってソート処理されているの謎。

内部のsortメソッドでイテレータが並び替えのアルゴリズムで処理してるのでしょうか。
詳しい解説求む。

ちなみに今まで並び替えのアルゴリズムには目をつぶって生きてきたので、
何種類かあってそれぞれに特徴と効率があるというぐらいしか、あまりよくわかってない。

560 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 12:56:51 ]
-1と0と+1というそれそのものには深い意味はないよ

「今持ってるものが挿入先と比べて大きいか小さいか同じか」を調べてるだけ
手に持ってるものが大きかったら“上”に置いて、小さかったら“下”に置いて、同じだったら“横”に置く

普通にリアルに手元で何かを大きさ順に手動で並べ替えるのと同じ処理をしている
実際はもちろん事前グループ分けとか処理順とかにテクニックがあって単純ではないが、
並べ替えの行為そのものに着目した場合、理屈自体は「大きいか小さいか同じか」と一緒

561 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:07:55 ]
sortメソッドに与えるブロックは「大小の判断基準」
人間に天秤を与えれば重さの大小になるし、ものさしを与えれば長さの大小になるようなもの

その判断基準を元に実際に並べ替えるのはsortメソッドの内部で行われる

sortメソッドは少量のデータを手軽にソートしたいような
ソート手段にこだわる必要のない場合に向いている(大抵は事足りる)

もし速度的に不足するような場合はアルゴリズムを選ぶ必要があるし
それを自分で実装するかライブラリを使う必要がある

562 名前:newbie mailto:sage [2009/09/03(木) 13:08:25 ]
>>560
並べ替えのアルゴリズムに処理をわたす黒魔術ってことでいいですか?

563 名前:newbie mailto:sage [2009/09/03(木) 13:12:40 ]
>>561
なるほど、判断基準を渡しているってことか。

イテレータの章で判断基準を渡すってのが書いてあった。
「メソッドがどういう比較処理をおこなうかを渡して欲しい場合がある」と。

その処理がブロックで囲まれた a <=> b ってことか。
謎とけたー。気がする。



564 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:13:43 ]
なるほど
sort{|a, b| a <=> b }


 {|a, b| a <=> b } ってなんだよ! いきなり b とか出てくんじゃねえよ!

というとこですな

565 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:17:54 ]
irb> p [5, 4, 3, 2, 1].sort{|a, b| p "a:#{a}, b:#{b}"; a<=>b}
"a:5, b:3"
"a:3, b:1"
"a:4, b:3"
"a:2, b:3"
"a:4, b:5"
"a:1, b:2"
[1, 2, 3, 4, 5]


566 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:45:19 ]
0が偽じゃない言語だから、perlみたいに、比較 or 比較 or 比較 みたいに書けなくて嫌だね
なんでもいいなら、-1,nil,1 でよかったんじゃないのか

567 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:46:07 ]
Cの標準ライブラリにあるqsortも、「比較方法」だけを別関数で
作っておいて、その関数(のポインタ)を引数として渡すような造りになっている。

Strategyパターンですかな。


568 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 13:50:31 ]
判断基準を別に設けると、ひとつの枠組みを用意するだけで好きに扱えるからいいよね。
人間配列.sort{|a,b| a.身長 <=> b.身長}だとか、体重に変えてみるとか、逆順にソートしてみるとか。


569 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:18:53 ]
>>566
(a.身長 <=> b.身長).nonzero? or (a.体重 <=> b.体重)


570 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:43:53 ]
変数に型がない言語の場合、""や0が偽じゃないことで得られる恩恵の方が多い気がするな

無効値は偽であってほしいけど、正常値を数値や文字列で返す関数などは
0や""も正常値として扱うケースが多い。なので、これらが偽だと、戻り値をそのままブール式につかえない

Perlなんかだと、0も""も偽だから、これらも正常値として返す関数の戻り値をチェックするときは、
die "エラ〜" unless defined get_string()
とかやって、""のケースを除外しなくちゃならない。|| とか && も有効活用できないし

571 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:51:51 ]
>>570
//演算子じゃダメなの?

572 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 14:57:24 ]
>>569
それって身長が不一致のときにtrueが返らない?

・・・返値はselfかnilなのか、よくできてるなぁ

573 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:00:24 ]
0を偽にしろと言ってるのではなくて、0が返ってきてもうれしくないよねってことでしょ



574 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:07:10 ]
>>573
あぁ、そっか。骨髄反射してた。さーせん

575 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:18:53 ]
["foo", "Bar", "baZ"].uppereach{|i| puts i}

FOO
BAR
BAZ

みたいなマイ繰返子って作れんの?

576 名前:newbie mailto:sage [2009/09/03(木) 15:46:30 ]
>>565
黒魔術解明!!ありがと。スッキリしたぁ。

577 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:46:43 ]
def uppereach
hoge.each do |x|
yield x.upcase
end
end
みたいな?(Arrayに組み込むのってどうやるんだっけ)

578 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:49:30 ]
class Array
def uppereach
self.each do |s|
yield s.upcase
end
end
end

579 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:50:03 ]
newbie氏はブロックがわかってないとみた。
別に黒魔術でもなんでもない。

580 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:59:53 ]
黒魔術というとevil-rubyみたいな。(よいこは検索しないように)



581 名前:newbie mailto:sage [2009/09/03(木) 17:23:30 ]
>>579
今回の場合、yieldに与える処理ってことですよね?

yield自体、今日、たのしいRubyを読んで知ったばかりなので…。
わかってないといわれれば、わかってないはず。

間違ってますか?

582 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 17:44:22 ]
yieldって文脈次第でいろんな日本語になるんだな。
イテレータの場合は何だろ。「任せる」?


583 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 18:10:50 ]
つまり
yield (newbieさん.理解度)
てことか



584 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 18:15:22 ]
産むかと。

585 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 18:29:16 ]
14歳から始めるruby買ったが外した
標準命令の説明あんま書いてないし
内容が詳しくない






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

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef