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

592 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:00:48 ]
require や load した場合、ローカル変数だけは、ファイルごとにスコープがあります
ローカル変数という概念を保護する制限だと思ってくだされ

require ではなく Ruby スクリプトファイルとして読み込んで実行することで制限を乗り越えることができますが勧めません
ファイルとモジュールの構造を変えることのほうを強く勧めます

593 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:09:36 ]
数字をキーに持つハッシュがあり
その中で一番小さい数のキーの値を取り出したいのですが
単純に書くと以下になるんですが
他に何かこれだという方法はないでしょうか?

h = {2 => "a", 5 => "b", 7 => "c"}
p h[h.keys.sort[0]]
=> "a"

これで問題があるわけではないですが
他に方法がある気がしたので質問させてもらいました

594 名前:デフォルトの名無しさん [2009/10/07(水) 18:12:38 ]
hoge = moge.execute
print hoge

というとき、print hogeの hogeのところで moge.executeが参照され
実行されて得られた結果が、printされるという理解でいいですか?

595 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:16 ]
>>593
素直に書くなら
h[h.keys.min]

596 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:18:42 ]
>>594
一行目の時点で
>moge.executeが参照され実行されて得られた結果
がhogeに収まる
二行目はすでに収まってるhogeの中身を出力するだけ

>>594の日本語の部分をrubyで書くとこんな感じ?
hoge = Proc.new { moge.execute } # moge.executeはまだ実行されない
print hoge.call # Procを実行する(moge.executeが実行される)


597 名前:デフォルトの名無しさん [2009/10/07(水) 18:22:48 ]
rows = dbh.do("INSERT INTO people (name,height)
VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
printf "%d rows were inserted\n", rows

ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
4 rows were insertedと表示されます。

printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
どういう動きをしているんでしょうか?


598 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:24:35 ]
そのような目的に使うデータ構造としては、ヒープツリーや優先順位つきキューというものがあり、
Rubyには長らくこれが標準だというような実装がなかった。ので、自分で作るか、
既存のものをさがすかということになります。

以下、最近できたものなので、あるよ、という紹介しかできませんが、
depqという優先順位つきキューのgemがあります(あるはずです)。
ttp://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-dev/39248?39066-39441

599 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:21 ]
>>598>>593あてね

600 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:45 ]
>>596
考えていたことと逆でした。ありがとうございます。



601 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:35:10 ]
>>597
ttp://www.ruby-lang.org/ja/man/html/_C1C8A4DFB9FEA4DFB4D8BFF4.html#printf
ttp://www.ruby-lang.org/ja/man/html/sprintf_A5D5A5A9A1BCA5DEA5C3A5C8.html

個人的には Ruby ではないので嫌い
to_s で問題の起こらない範囲で
puts "#{rows} rows were inserted"
と書くべき

602 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:40:22 ]
>>601
String#%は?

603 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:42:04 ]
>>602
異端審問される恐れがあるので
人前に晒すスクリプトでは使わないように

604 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:44:10 ]
スタイルの押しつけうぜぇ

605 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:14 ]
個人的にString#%は蛇道

606 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:21 ]
>>601
どもです。putsに書き換えて実行したところ同じように出ました。

どこから、4という数字を得ているのでしょうか? 上の式だとdbh以下を実行して
4つの要素をDBに登録していますよね。

607 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:57:53 ]
>>604
Ruby使うの今すぐやめれ
プログラミングスタイル強制要素が無数に散りばめられてるぞ

608 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:58:58 ]
>>601
君にはPythonが向くんじゃないかな?性格的に。

609 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:02:23 ]
>>608
sprintf は Ruby のものではないということを知らない?

610 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:04:06 ]
>>606
そりゃそういうふうに作られてるからだろ
do のマニュアル読め
わざわざカウントして数値を返してるようなので初心者殺しではある



611 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:10:25 ]
sprintf と pack/unpack は「Ruby らしい」糖衣実装が望まれていながら、
ダラダラと旧来の仕様を引きずってきたんだよな
オタクが他の言語の知識を流用できて便利というただそれだけの理由で

612 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:00 ]
>>611
あれは正規表現みたいなサブ言語だと思って諦めるのが吉かと思われます
確かに覚えにくいしなんとかしたほうがいいのは確かなんだけれど
あれをまたまとめて別途組み立ててしまうとそれだけで結構な一覧表に

613 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:17:18 ]
>>610
どもっす。doのマニュアルを探してきます。



614 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:18:04 ]
printf類にrubyらしい実装なんて不要
他の言語と違う動作されたらそれこそ非難の的

615 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:33 ]
prntf などの「メジャーな関数」をなくせという話ではないように読めるが

616 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:25:25 ]
>>611
sprintfは別言語でそれやられて大迷惑
>>612も言ってるけどいまさら別に覚えるのも嫌だから
今までと同じでいいよ・・・

617 名前:593 mailto:sage [2009/10/07(水) 19:27:45 ]
>>595
minですね
探し切れてませんでした
ありがとうございます

>>598
なるほど、確かに求めてるのはヒープみたいなものでした
参考になりましたありがとうございます


618 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:32:02 ]
別にみんな自由に書けばいいじゃんw
Obsoleteでもない限り機能として用意されてるんだから使えばいいし
「個人的に嫌い」な人が大半になればそれを使わないのがデファクトスタンダードになるだけだし

619 名前:591 mailto:sage [2009/10/07(水) 19:37:20 ]
どうもありがとうございました >>592

うーん、もうちょっと明示的にスコープの話が書いてあると嬉しいような。
doc.okkez.net/static/187/method/Kernel/m/require.html
doc.okkez.net/static/187/method/Kernel/m/load.html

620 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:56:18 ]
ruby/dbiの公式に行きまして、classデータベースというページがあり
メソッドの説明がしてありました。しかし、記述が少ししかなく。
こういう場合、ソースを読むんでしょうか?

とりあえず、今は目的に必要なことだけをやっていこうと思います。



621 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:06:32 ]
>>597
>rows = dbh.do("INSERT INTO people (name,height)
>VALUES('Wanda',62.5),('Robert',75),('Phillip',71.5),('Sarah',68)")
>printf "%d rows were inserted¥n", rows
>
>ruby/dbiの使い方ページにあるコードの抜粋なんですが、実行すると
>4 rows were insertedと表示されます。
>
>printf "%d " , rowsで、rowsから何かの数字を得ているようなのですが
>どういう動きをしているんでしょうか?

1行目の rows = dbh.do("insert....") で、insertした件数が返されて rows に代入されているだけじゃないかな。
それを printf "%d ", rows で出力している。そんだけ。

622 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:29:41 ]
>>620
ググったら公式じゃないけどこんなページがあったよ
ttp://www.nslabs.jp/book2-dbi.rhtml

623 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:31:28 ]
>>618
選択肢がないという話では

624 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:35:37 ]
>>623
>>602-603がそうはとても見えない

625 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:38:34 ]
>>624
sprintf 使ったことある?

626 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:45:18 ]
>>625
sprintf系まとめて異端だったの?
>>603は「(sprintfはまだしも)String#%は使うな」と言ってるんだと思ってたけど


627 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:51:44 ]
C に由来する sprintf や pack/unpack の書式記号や利用法が Ruby らしくないというツッコミなんじゃ…

628 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:57:52 ]
pack系はともかくsprint系に選択肢ないか?

629 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:02:21 ]
>>603はどう考えてもネタです

630 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:04:49 ]
pack は map で直接書くというコードの動作的にはある意味わかりやすい代替手段が



631 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:27:58 ]
しかしprintfを非難するとはいい度胸だ…これも平成ゆとりが増えたからなのか…

632 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:33:55 ]
packにせよprintfにせよ、DSLは不思議と好き嫌いが分かれる気がする

633 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:34:36 ]
>>631
「わかりにくい」ことは確か
初心忘れると老害と罵られるぞ

634 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:37:58 ]
反printf派に聞きたいんだけど
今より使いやすい(Rubyっぽい)printf構文ってどんなの?

635 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:39:17 ]
とりあえず「詳しくはmanページ読んでね」というのは頂けないな
「正規表現はPerlと同じ物が多いので同じ場合はそちらを」は通用しないのに

636 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:14 ]
>>633
packは使ったこともないし使う場面もないから構文すら知らない。
rubyでdef endしちゃうから今後も使うことはないだろう。

637 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:40:50 ]
$と記号1つのグローバル変数(今となっては排除したいらしいが)も、
「Perlといっしょ」で通じなくなってきてるからな…


638 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:42:04 ]
printfを知らないとなると、rubyしか触ったことないってことになるんだがな…
webクリエータはたいてい適当だしそんなもんかw

639 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:00 ]
>>636
バイナリファイルのヘッダパースとかどうやってやってるの?

640 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:43:31 ]
>>636
irb1.8> p "ルビー"
"\343\203\253\343\203\223\343\203\274"

これ日本語に戻してー



641 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:44:32 ]
>>638
お前puts使わないだろ

642 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:47:39 ]
>>636
1.8でUnicodeEscapeSequence文字列が欲しいです先生

643 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:49:20 ]
>>640
evalしろ

644 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:50:35 ]
packはまあ・・・・使う時にリファレンスを見てやるしかないな

一方、青木氏はpackで壊れた
>まったくpackの意味不明さときたら、
>「packのテンプレートがわからなくたって悔しくなんかないんだからな! バーカバーカ!」
>と幼児退行してみたくなるほどです。

645 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 21:52:37 ]
>>643
こういう文字列をevalしろとな

646 名前:デフォルトの名無しさん [2009/10/07(水) 22:09:18 ]
青木氏って2chねら?

647 名前:デフォルトの名無しさん [2009/10/07(水) 22:27:52 ]
ttp://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
このファイルが開けないのですが、どーすれば良いのでしょうか。

648 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:31:52 ]
>>647
中身がタブ区切りのtsvだからです
っていうかファイルの中身確認することくらいしようぜ

649 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:34:21 ]
putsすると日本語でも表示されるよね
sjis問題で文字化けはするけど

650 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:44:34 ]
gets, puts ってのはもろにCだと思うんだが・・・



651 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 22:55:35 ]
え・・・そうだと思うけどなんか違った・・?

652 名前:デフォルトの名無しさん [2009/10/07(水) 23:28:42 ]
visualstudioみたいにボタンとかを貼り付けて入力フォームが作りたいんですが
ああいうツールは無いんでしょうか?

653 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:32:42 ]
CentOS上でruby1.8.7から1.9にアップデートしたいのですが、
Linuxの知識に乏しいためなかなか手が付けられません。
1.8.7のインストールはネットで調べつつなんとかソースコードから入れました。
一般的にはどのような手段でアップデートするのでしょうか?

654 名前:デフォルトの名無しさん [2009/10/07(水) 23:34:49 ]
>>653
このスレ的には Debian にしろって言われると思うが。

655 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:34:51 ]
> Linuxの知識に乏しいためなかなか手が付けられません。
じゃあ無理だ
諦めろ
あとスレ違い

656 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:39:29 ]
こういう奴は何しにこのスレに張り付いてるんだろうか

657 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:41:38 ]
>>656
わりと適切だと思うが…
Linux使ったことあるか?

658 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:43:45 ]
make がなにやってるか理解しないといかんからなー
それはこのスレの範囲を超える
パッケージがないなら諦めれ

659 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:01 ]
貼りついてるw

660 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:15 ]
もろスレ違いだと思うが。




661 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:44:52 ]
Ruby公式ページにインストールガイドってリンクあるからみればいいよ

662 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:48:54 ]
教祖も使っているDebian最強

aptitude install ruby

663 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:49:18 ]
Linux上で、しかもLinuxに関する知識がないのなら
パッケージ管理システム(aptやyum)を使え、としか

664 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:54:26 ]
>>662
1.9.1は存在しない(Sid除く)

665 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 23:58:14 ]
この場合Linuxの知識は無関係だろ

666 名前:デフォルトの名無しさん [2009/10/08(木) 00:38:00 ]
>>653
package application で source または archive の site を追加…
大抵は package gpg key は初期の物が使える筈…
source package で compile install が出来るので在れば source を拾って来て install.

667 名前:デフォルトの名無しさん [2009/10/08(木) 00:50:15 ]
ruby は python を使えれば 使う事ができますか
python と ruby の関数で違う物は在るのでしょうか?

668 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:54:47 ]
フィッシングタイムですか?

669 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:58:16 ]
邪魔しないでください >>668

670 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:05:11 ]
>>667
全体的に大阪弁と東北弁ぐらいの違い



671 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:09:16 ]
>>667
片方が使えるなら、もう片方もさほど苦労しない

672 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:53:24 ]
gems.rubyforge.orgにgemでアクセスできなくない?

673 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:57:30 ]
rubyが司る世界において

数字の1が生まれたら、それは数字クラスに所属していて
数字クラスのメソッドにない動きは出来ないってことですか?



674 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:10:39 ]
Rubyには、オブジェクト(インスタンス)ごとにメソッドを定義できる、
特異メソッドという仕組みがあるので、たいていのクラスでは、イン
スタンスごとに振る舞いを変えることができる。
しかしながら、数(Numericおよびサブクラス)にはこれが定義できない
ように制限されている。

なお、数インスタンスが生まれた後に、数クラス自体にインスタンスメ
ソッドを追加した場合、既存の数インスタンスでも使える。


675 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:21:33 ]
irb> module One; def one; "one!"; end; end
irb> 1.extend(One)
TypeError: can't define singleton
from (irb):2:in `extend_object'
from (irb):2:in `extend'
from (irb):2
from :0
irb> "1".extend(One).one
"one!"
ああ、わかりやすいエラーだ

676 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:26:28 ]
>>673
一般的にはそう
クラスに定義された動作(メソッド)のみが可能
ただし Ruby はオープンクラスだから、自分でクラスを拡張してメソッドを追加変更することができる
ある人の String クラスにあるメソッドが、 別の人の String クラスにもあるとは限らない
ある人の作った String のインスタンスが、別の人の作った String のインスタンスと全く同じ動作をする保証はない
ただ、組み込みクラスのメソッドやライブラリ標準メソッドの上書きは自己責任なので気にしなくてよい

それと整数クラスは>>674の言うように例示にはちょっと不適

677 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:34:07 ]
>>675
数字と数の違いか:-p


678 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:22:07 ]
M1::C1::C2 というネストしたクラスがあります
あるオブジェクトが M1 を「ネスト構造上含んで」いるかどうかを調べたいです
文字列として正規表現で比較するしかありませんか?

obj.class.to_s =~ /\AM1::/

679 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:56:18 ]
>>678
どんな場合にも動作するのは文字列としての比較
Module.nesting が使えることも多いが、特定条件で存在できないモジュールオブジェクトを指定できない

680 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:02 ]
C → Java → Ruby と勉強してきましたが、次の言語は何がいいと思いますか?
プログラミングは単なる趣味です。



681 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 11:58:52 ]
Haskell

682 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 12:08:49 ]
Lisp系列が足りないな

683 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:20:33 ]
>>680
趣味というなら、マイナー言語でもいいよね。
Rubyとは真逆の、静的な関数言語がいいんじゃないかな。
OCamlかHaskellあたり。どちらも日本語での入門書があるし。

684 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:10:41 ]
railsで、webアプリを作るのに
必要な知識ってなんですか?

ruby
rails

正規表現
html,xhtml,xml
javascript
mysqlなどRDMS
apacheなどhttpサーバー

こんなもんでしょうか?

685 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:04 ]
>>684
他の言語でフレームワークべったりでないWebアプリケーションを作ることができれば問題なし
なんじゃそりゃって感じだけど、まず間違いない

あとRailsは板違いなので
【Ruby】Ruby on Rails Part8
pc11.2ch.net/test/read.cgi/php/1252842574/
こっち池

686 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:15:17 ]
>>681-683
サンクス。

OCamlかHaskellあたりがお薦めなんですね。
了解しました。


687 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:20:43 ]
>>685
どもっす。半年間精進してダメなら諦めます。

688 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:40:15 ]
rspec 版の testrb コマンドってありませんか?

689 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:48:15 ]
>>688
spec -fs -c spec/


690 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:54:54 ]
>>689
1578 examples, 0 failures

っひょー



691 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:14 ]
>>690
おまえすごいな

692 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:32:09 ]
個人でもちょっと規模大きければこんなもんだろ

693 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:31:04 ]
俺レベルになるとワンライナーで大企業の基幹システムを作れるようになる

694 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:45:04 ]
rspec 使ってるとテストはやたら増える

695 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:08:57 ]
無印のサイトはシェルやワンライナーで作ってる、なんて言ってたけど、
どーりで重いわけだと思ったよ

696 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:44:18 ]
初心者らしい話題

class CArray < Array
end
a = CArray.new
b = CArray.new
c = a + b
p c.class #=> Array

CArrayを返してほしい。

class CString < String
end
a = CString.new("aaa")
b = CString.new("bbb")
c = a + b
p c.class #=> String

CStringを返してほしい。

697 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:17:14 ]
CArray というクラス名に吐いた

class CArray < Array
def +(v); self.class.new(super(v)); end
end


698 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:58:05 ]
a[0..1]みたいなのはちゃんと元のクラスにやってくれるんだよね

699 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:22:00 ]
Array や String の(Cで記述した) + メソッドの定義の中で
Array.new や String.new がハードコーディングされてるんだろうな
何らかのシステム的理由があるか、いまさら変更できないか、どっちかだろう
まあ、バグっちゃバグかもしれん

700 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:13:02 ]
>>698
むしろそっちのほうの挙動が不思議
Stringクラスの実装はCStringを知らないはずなのに、
どうしてCStringオブジェクトを返せるんだ?



701 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:28:37 ]
インスタンスがあればクラスわかるから返せるにきまっとるわい

702 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:03:22 ]
superのnew呼び出しでself.class.newってやるのきもくね?

703 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 02:10:19 ]
継承を前提としたクラスならってところ
組み込みでいえばIOとかNumericあたり

というか、otherと絡むときにわざと基本クラス返してる気がするなぁ


704 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:07:56 ]
レヴェルの低いインターネッツだな

705 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:22:09 ]
組み込みのくみこちゃんをdisるのはやめろ

706 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:06:39 ]
>>703
あらゆるクラスは継承で動作可能「でなければならない」
継承したとたん動作しなくなるライブラリはプギャー

707 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:26:07 ]
それぞれArrayを継承したFooとBarがあったとして foo + bar がどのクラスを返すべきかとか考えると
>>703の言うようにわざと基本クラスを返すのはありなんじゃないかと思う

708 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:31:28 ]
>>707
> foo + bar がどのクラスを返すべきか
変換っぽいメソッドでない限り、通常はレシーバのクラスを返すべき
つまり、foo のクラスを返すべき

709 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:54:09 ]
このパッチをあててリビルドすればOK
--- a/array.c
+++ b/array.c
@@ -2657,12 +2657,14 @@ rb_ary_fill(int argc, VALUE *argv, VALUE ary)
VALUE
rb_ary_plus(VALUE x, VALUE y)
{
+ VALUE klass;
VALUE z;
long len;

y = to_ary(y);
len = RARRAY_LEN(x) + RARRAY_LEN(y);
- z = rb_ary_new2(len);
+ klass = rb_obj_class(x);
+ z = ary_new(klass, len);
MEMCPY(RARRAY_PTR(z), RARRAY_PTR(x), VALUE, RARRAY_LEN(x));

710 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:07:52 ]
本当にそのほうがいいと思うなら、
redmine.ruby-lang.orgにfeature request投げとけば。

個人的には、両方のクラスが同じときだけにすべきじゃないかと思うが。

あと2chに初出のコードは著作権的に取り込むのは危険なんじゃなかったっけ。



711 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:22:54 ]
>>710
危険というか取り込み不可能
というか別にそんなことを意図したコードでもあるまい
お前空気読めないと周りから言われるか全く何も言われないかどっちかだろ

712 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:50:19 ]
無理矢理ねじ込んだ感バリバリの3行目に
ドカタのストレスを見た。

713 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 08:56:26 ]
言われるか言われないかのどっちかワロタ

714 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:27:56 ]
質問です;;
mvcモデルをつくりたいのですが、下記エラーが出て削除機能が使えません

undefined method `destroy'

destroyが使えない??
newもfindも使えるのに・・
解決法知ってる方いたら教えてください

715 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:40:02 ]
MVCと直接関係ない質問に見えるけど何の話?


716 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:45:48 ]
要するにdestroyメソッドを使う方法がわからないです


717 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:47:12 ]
destroyメソッドってなに?

718 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:49:12 ]
すいませんここはrailsは対象外なんですかね・・
他当たってみます

719 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 14:51:30 ]
>>718

RailsならRailsと言え。
MVCってのはRails固有の概念ではない。

あと、
【Ruby】Ruby on Rails Part8
pc11.2ch.net/test/read.cgi/php/1252842574/



720 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:33:54 ]
undefined method `destroy'の後が重要だったりするんだよな



721 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 17:12:32 ]
>>720
この場合はいいえ

722 名前:714 mailto:sage [2009/10/11(日) 01:00:33 ]
>>721
何か知ってる事あったら教えてもらえますか?

723 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 01:07:07 ]
うざ

724 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:59:17 ]
PStore.dump してファイルに保存済みのデータがあったとし

a = nil
PStore.new(...).transaction do |c|
a = c[:data] # Array や Hash がネストしたデータ(shallow copy では完全にコピーできない)
end

x = a[...][...].XXX[...]

というように PStore.transaction の外で読み込んだデータ
を使っても問題ないものなのでしょうか。

内部的には Marshal.load しているということなので、問題
ないような気もするのですが、ドキュメントの記述を見ると
そういう使い方していないようなかんじなので…。

725 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:02:25 ]
Marshal.dump は唯一、標準ライブラリで深いコピーを行う

726 名前:724 [2009/10/11(日) 12:16:24 ]
なるほど >>725 さん
PStore が Marshal 上に実装されているという前提が変わらない限りは
PStore#transaction の外にデータを持ち出しても問題ないわけですか

これまで無駄に transaction の内部にコード入れていたので書き直そう…。




727 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:20:45 ]
>>724
PStore#transactionは、
* 同じデータファイルに対する他のPStoreアクセスを禁止している
(読んでる間に書き換えられないように)
* ブロック処理がabortされなければ、変更の再ダンプを行う。
という感じの仕事をしている。

中で読んだデータはそのままメモリにある。ブロックを出たあと、
誰かがデータファイルを書き換えたとき、それとメモリが一致しな
いということを認識した上でなら問題ない。



728 名前:724 mailto:sage [2009/10/11(日) 12:43:24 ]
まさにそのあたりが気になっていた(transaction 抜けたら参照している
データがメモリ上から消えちゃう可能性があるのかなあ、とか)のです、
明快な説明どうもありがとうございました >>727 さん


729 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:19:20 ]
きちんとトランザクションって書いてあるだろ
トランザクション抜けたからって取得データ本体が消えるなんてことはそもそも

…実装としてありそうな気もするな
トランザクション有効中に明示的に複製してクダサーイというのはアリではある

んで、PStore#transaction は普通は File.open のようにブロック範囲を限定して使う
データを取得または保存する瞬間にだけ、トランザクションに入る
何らかの理由で複数回アクセスしたいという場合は、PStore.new のオブジェクト自身を変数で保持する

なお、 PStore は、実装の都合上「ファイル全体を最初から最後まで必ず読み込む」ので注意
変更部分に対応したファイルの一部分だけを書き換えるとか、そういう細やかな小細工は通用しない
データの大きさと更新頻度によっては複数に分けたほうが負荷的にお得

730 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:36:09 ]
WinでAutoHotKeyの代わりに使える機能を完備してあるライブラリってない?



731 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:56:05 ]
繰り返し処理で正規表現を使う場合
a.each do |b|
print "match" if c =~ /hoge/
end
よりも
reg = Regexp.new("/hoge")
a.each do |b|
print "match" if c =~ reg
end
の方がいいでしょうか?

732 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:05:15 ]
そういうのは正規表現の中に変数を含む場合です

733 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:12:35 ]
変数を #{} などで含まない「固定」の正規表現は1回しか生成されない

1.upto(10000).each do
/h/ =~ "hoge"
end

でも

re = /h/
1.upto(10000).each do
re =~ "hoge"
end

でも、Regexp のインスタンス生成は1回だけ
つまり、処理速度や負荷的には実質どちらでも構わないし、
厳密にはブロックの外の変数を参照するコストのぶんだけ後者が遅い

734 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:34:33 ]
>>732-733
なるほど、ありがとうございます

735 名前:724 mailto:sage [2009/10/11(日) 22:15:19 ]
RDBを使うほどでもないけどちょっと中間データをファイルとして永続化して
おきたい(けどCSVファイルなんかは表現力が弱いので嫌な)ときに、素で
Marshal.dump/load するより楽なので PStore を使っていたのですが
PStore#transaction でデータ処理全体をブロックする必要があるのかないの
か「実装としてありそうな気もする」ので気になっていたので、たいへん勉強
になりました、どうもありがとうございます >>729 さん


736 名前:デフォルトの名無しさん [2009/10/12(月) 19:03:31 ]
rand()の範囲を指定したいのですが
10から20の間の数をランダムに発生させたいというばあい
rand(10-20)とか直接与えることは出来ますか?


737 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:13:37 ]
0から10の範囲の乱数を発生させて10を加える。


738 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:18:20 ]
>>737が正解

739 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:21:25 ]
俺俺ライブラリに

class Range
  def rand
     Kernel.rand(last-first+1)+first
  end
end

ってやっといて
(10..20).rand
するとか
標準じゃ無理

740 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:29:25 ]
(10..20).to_a.sort_by{rand}.first



741 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:39:58 ]
>>740短いのですがどうもちゃんと動作しないようです。
(1..2**30).to_a.sort_by{rand}.first
としましたが、結果がかえってこないのであきらめました。

742 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:07:39 ]
>>741
そりゃ単に重すぎるだけだ
要素数が2**30の配列を作ってるんだから

そこまで大きな数を扱うのなら、小手先なしでrandした方がいいよ

743 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:08:59 ]
だから>>737以外は実用妥当な乱数にならねえって

744 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:09:56 ]
スレタイ100回読んで半年ROMっとけ

745 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:15:49 ]
乱数発生部は組み込みに任すのが完全に正しい姿だな
累乗とか使って結果的に偏らせるのも成長段階には必要という説もあるが

746 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:17:49 ]
最近/.並にゴミで埋まるようになってきたなここ。

747 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:23:23 ]
>>746
2chも大差ないだろ

748 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:24:39 ]
>>746
斬新な自己紹介ですね

749 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:40:35 ]
こういうありきたりなループの終了条件に
!=を使うのは普通ですか?

count = 1
end_count = 10

while count != end_count
puts count
count = count + 1
end

750 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:44:09 ]
へん



751 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:48:03 ]
(1...10).each {|i| puts i}

じゃだめなん?

752 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:50:22 ]
count が増えるとは限らないのだろ

loop do
 break if count == end_count
 ...
end

せめて break して欲しい

753 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:08:18 ]
>>752
何でbreakの方を推すの? 横から見てもいまいちわからん
普通ここは、読みやすいuntilを推す流れじゃないかと思うんだけど

754 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:15:49 ]
あまり使わないんですね。
気をつけます。ありがとうございます。

755 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:18:26 ]
あまり使わないのか?
場合によりけりで特に使う使わないを気にする記述でもないと思うんだけど

756 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:21:14 ]
>>740
単に非効率なやり方だろ
他人に教えるようなものじゃない

757 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:29:55 ]
C++のSTLのイテレータに慣れてるとそう書きたくなるな。

758 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:33:38 ]
読みやすい until などというものは存在しない
と思う






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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