- 1 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 01:07:21 ]
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.7 の使用をお勧めします】 ※1.8.7 は1.8 と 1.9 の橋渡しをするためのリリースです。 1.9 の新機能の一部が利用可能なので初学者にお勧めです。 ※ただし十分安定しているとは言えないので プロダクション環境での利用にはお勧めしません。 関連スレやURLは>>2-8あたりを見てください。Ruby on Railsの質問は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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 696 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:28:31 ]
- めそっどぽいんたってなんじゃらほ
- 697 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:37:20 ]
- (1..10).reverse_each.inject(:+)
- 698 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:00:35 ]
- >>696
C#を調べろ、としか言いようがない。 要するに関数ポインタのC#版。
- 699 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:08:03 ]
- >>696
特定のインスタンスの特定のメソッド(GUI部品とか)を呼び出すためのポインタ 特定のクラスのオブジェクトにメソッド実行を依頼すると考えれば根っこは同じ という説明はどうだろう
- 700 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 22:18:00 ]
- わっかりやすいのう
- 701 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 02:18:37 ]
- 質問です
関数オブジェクトと普通の関数を呼び出すときのコストってどちらも同じですか?
- 702 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 02:41:11 ]
-
・Rubyには厳密な関数はない ・Rubyには関数オブジェクトもないっていうかまあこのへんは別にいいや てことで、普通のメソッド定義とProc(lambda)オブジェクトの比較と読み替える Procの呼び出しコストの重さは異常 以上 使うと面倒な概念をとても簡潔に表現できるけど、多用すると明らかに遅くなるので注意 便利なのでほいほい作る傾向にあるが、何度も使う部分に組み込む場合は、できれば丁寧に分析してメソッドにしたほうがいい
- 703 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 06:12:15 ]
- Rubyってメソッドもオブジェクトなの・・・?
- 704 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 06:44:11 ]
- >>703
オブジェクト化することもできる
- 705 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 07:23:00 ]
- そんなことしたマンコは臭うけどな
- 706 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 08:30:13 ]
- javascriptバカにすんな
- 707 名前:デフォルトの名無しさん [2008/09/09(火) 08:32:52 ]
- 臭いのは勘弁して・・・
- 708 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 09:08:56 ]
- javascriptはコンソールから起動して使える実装がないじゃん。ここ、バカ丸出しww
- 709 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 09:09:38 ]
- 毎日が夏休み
- 710 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 09:17:50 ]
- >>703
ブロックつきメソッドの {|x| ...} 部分を「持ち歩ける」と考えてもらうと間違いない
- 711 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 09:24:09 ]
- >>708
>javascriptはコンソールから起動して使える実装がないじゃん。ここ、バカ丸出しww spidermonkeyもrhinoもコンソールから起動できるじゃん。 バカ丸出しはおまえwww
- 712 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 09:38:26 ]
- javascriptは組み込み向けの設計ってこと忘れてるおまえは、バカ丸出しww
- 713 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:25:13 ]
- 話題のv8のshellが普通にいい感じですよ
- 714 名前:デフォルトの名無しさん [2008/09/09(火) 11:33:16 ]
- 個人の著作を売り物にするようなところだしmixiと同じだな。
そのうち違う波が来て潰されるんだろうな…
- 715 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:40:34 ]
- >>702
そうなんですか。 昨日からruby勉強し始めて、全部関数オブジェクトにしたら一貫性あるかな? とか思っていたんですが、重いなら仕方ないですね。。
- 716 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 11:45:08 ]
- 全部ラムダ式にすればいいと言うわけですね
- 717 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:07:13 ]
- 質問です。
配列のmap関数で適用する手続きの代わりに関数オブジェクトを使うことはできませんか?
- 718 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:18:26 ]
- 関数オブジェクトって何ですか?
Procオブジェクトですか、ブロックですか?
- 719 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:23:08 ]
- たとえば、
hoge = lambda{|x| x+1} このhogeという値にバインドした関数オブジェクトをmapで使うことはできませんか?
- 720 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:26:52 ]
- (1..10).map &hoge
- 721 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:32:47 ]
- >>720
おお、すばらしいです では、次の質問ですが、 関数オブジェクト同士で関数合成ってどうやるんですか?
- 722 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:37:10 ]
- procとlambdaで作ったオブジェクトってイマイチ分からないのですが、簡単に言えば何が違うんですか?
- 723 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:46:54 ]
- ttp://www.hinet.mydns.jp/tdiary/?date=20080220
- 724 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 12:49:57 ]
- >>721
例えばこんなのがある Function Composition 2.0 Ruby Banter #006 media.fngtps.com/rubybanter/2007/006/
- 725 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:04:29 ]
- >>721 >>722
そのオブジェクトは Proc オブジェクト 違いはこのへんに ttp://doc.loveruby.net/refm/api/view/method/Kernel/m/lambda
- 726 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:10:13 ]
- 「関数オブジェクト」なんてないということをとりあえず前提として話してくれ。
なんで執拗に「関数オブジェクト」と言い続けるんだ?
- 727 名前:717=721 mailto:sage [2008/09/09(火) 13:10:26 ]
- >>721と>>722は別人です
- 728 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 13:12:54 ]
- func do |x| p x end
func { |x| p x } の違いでしたか・・・
- 729 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:22:21 ]
- 質問です
ある変数の型が何なのか調べる方法はありますか?
- 730 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:37:19 ]
- 質問です。
hoge = Array.new(10){|i| i}.map{|x| x+1} と hoge = Array.new(10){|i| i}.map!{|x| x+1} ではリソースの使い方に違いがありますか??
- 731 名前:デフォルトの名無しさん [2008/09/09(火) 14:41:59 ]
-
- 732 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:44:20 ]
- >>729
Rubyの変数には型はありません
- 733 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:47:11 ]
- >>732
では、たとえば配列の要素をすべて足す関数を作って、 整数と文字が入り交じった配列を渡してしまった場合はどうなるんですか?
- 734 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:48:14 ]
- 配列の要素の型に応じて違う処理をさせる方法はありませんか?
- 735 名前:デフォルトの名無しさん [2008/09/09(火) 14:48:49 ]
- 精子はやっぱり飲んじゃった方がいいかな?
- 736 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:52:28 ]
- >>732
型が無いというのも誤解を生む表現だと思うのですが、 ではどのオブジェクトのインスタンスなのか調べる方法は無いんでしょうか?
- 737 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:53:56 ]
- >>730
メモリとかを気にするのに Array.new に引数をつけてる人は久しぶりに見た nil が 10個生成されて直後に置き換えられるから最初のArray.newが一番無駄なんじゃね で、map と map! の差だけで、見たままの動作で、見たままのメモリ消費だと思われる 配列要素が 1万個とかバカみたいに多いときは後者のほうが一瞬だけ若干得 ただ、後者のような書き方はあまりしないかな
- 738 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:54:09 ]
- どのクラスのインスタンスなのか、でした。
- 739 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:56:26 ]
- >>736
型はない a = 10 したあとに a = 'str' としても動作する以上、変数に型は無いと言って差し支えない で、オブジェクトがどのクラスに属しているかはclassメソッドを使うとわかる
- 740 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 14:56:36 ]
- >>730
前者は配列が2個作られる。後者は1個だけ。課題か何かか? >>733 足せないものを足そうとした時にエラー >>734 kind_of? で仕分ける
- 741 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:00:56 ]
- Rubyの変数は本気でただのラベルだからな
他の言語では変数はいわゆる箱のようなメタファで説明できて、箱には形が決まってたりするもんだが >>734 動作一緒だが、kind_of? ではなく is_a? を勧めたほうがよいと思う
- 742 名前:230 mailto:sage [2008/09/09(火) 15:07:39 ]
- >>740
課題ではありません。 昨日からruby勉強中なんですよ。 夏休みだけど暇なんで。
- 743 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:08:01 ]
- このスレの住人は糞ばかりだし、飲んじゃった方がいいよw
- 744 名前:230 mailto:sage [2008/09/09(火) 15:10:45 ]
- >>737
最適化してはくれないんですね。
- 745 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:11:17 ]
- >>733
要素が順番に問題なく + メソッドに渡される 不適なオブジェクトが + メソッド内(で使ってる他のメソッド)でチェックされているなら、 TypeError か何か決められた例外が発生してそこで処理が止まる ある意味めんどくさいとも言えるな だから、「要素に数値だけが入っていることを配列登録時にチェックするArrayクラス」のようなものを作ったりする
- 746 名前:230 mailto:sage [2008/09/09(火) 15:13:53 ]
- >>745
なるほど。 静的型付け言語に慣れているせいで、ちょっとその辺はぎこちなくなります。
- 747 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:14:33 ]
- >>744
「どうせ直後で数値が全要素に代入されるんだから最初に nil 入れるのやめようぜ、 あ、ちょっと待って、map が続いてるからそれもまとめて 1回で処理しよう」 という判断は Ruby はしない というか無茶言うな そういうのはスクリプト作成者が事前に考えてくれ
- 748 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:16:32 ]
- nilの実装はintの0x00だけど?
- 749 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:19:27 ]
- >>747
遅延評価のHaskellなら朝飯前なんだがな
- 750 名前:デフォルトの名無しさん [2008/09/09(火) 15:20:40 ]
- あのー横から失礼しますが、
rubyの有用なサンプル・スクリプトはどこかにないでしょうか?
- 751 名前:730 mailto:sage [2008/09/09(火) 15:22:01 ]
- >>737
度々すみません。 たとえば1〜1000が順番に格納されている配列を生成するのに効率的な方法を教えてください
- 752 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:24:33 ]
- >>751
(1..1000).to_a
- 753 名前:730 mailto:sage [2008/09/09(火) 15:25:58 ]
- >>752
ありがとうございます
- 754 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:27:54 ]
- >>748
んなこと言ったら文字列は全部ただのバイト列だぞ(1.8限定)
- 755 名前:デフォルトの名無しさん [2008/09/09(火) 15:28:26 ]
- >nil が 10個生成されて直後に置き換えられるから最初のArray.newが一番無駄なんじゃね
こういうのは、こいつの妄想じゃね?
- 756 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:31:24 ]
- >rubyの有用なサンプル・スクリプトはどこかにないでしょうか?
どういうのを求めてるのかよく分からんが 「逆引き Ruby」でぐぐったら幸せなんじゃないかな
- 757 名前:デフォルトの名無しさん [2008/09/09(火) 15:37:25 ]
- そういう逆引きじゃなくて、文字を数えるwc伝統的プログラムが集まったサンプル集です。
"hello world\n"の延長みたいなものなんですが、どこにもないんでしょうか?
- 758 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:40:53 ]
- >>757
意図はわかった Rubyコミュニティとしては特にないので、個人で書かれた入門ページでも適当に探すといい もとろん間違ってる可能性もあるが、初学者ならおそらく同じように間違うわけでそれはそれで意義があるだろう というか、そういうのがきちんとまとまったページってのは他の言語でも稀なんじゃないかなー あれば楽しそうな気もするけどね
- 759 名前:デフォルトの名無しさん [2008/09/09(火) 15:44:54 ]
- あのー・・・・rubyは初めて触るんですけど、他の言語はバリバリ使いwwなんですが・・・・・・・・・
- 760 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:45:45 ]
- >>750 サクれ
- 761 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:47:28 ]
- 昔は「○○コマンドのクローンを作ってみよう」というのは教材としてわかりやすかったんだけどね
今はCUIコマンド自体の使用頻度が少なくて 「wcってなんですか?」 「いったいどういうときに使うんですか?」 「コマンドまたはファイル名が違いますって表示されました」 という状態で
- 762 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:49:18 ]
- >>741
> >>734 > 動作一緒だが、kind_of? ではなく is_a? を勧めたほうがよいと思う Rationalきぼんぬ。ピッケル本のどこかに書いてあったっけ?(ふとそんな気がしないでもない)
- 763 名前:デフォルトの名無しさん [2008/09/09(火) 15:57:09 ]
- 一応K&Cとかさくっと読んじゃったんですけど・・・ないですか。
日本語だと公式サイトの説明も適当だし(文章を書くのが面倒なんでしょうけど)、それなら有用なサンプルがあると理解が深まるんじゃないのかなと…
- 764 名前:デフォルトの名無しさん [2008/09/09(火) 15:58:45 ]
- ごっちゃになってたけど、CのK&Rでした。C言語教徒には失礼・・・
- 765 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 15:58:59 ]
- K&C・・・ああ、ケンタッキーとチキンのことか。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:01:32 ]
- モルモン教教徒はすぐ我慢汁が出ちゃうのがなんともねぇw
- 767 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:07:45 ]
- K&Rは難しすぎでさくっとなんか読めないよ。
あの超難しいといわれてる「ポインタ」を当然知ってるって前提だろうが。
- 768 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:16:59 ]
- ポインタを超難しいと言っている人を久しぶりに見た。
ああ、教鞭を執らなくなって結構経つなぁ・・
- 769 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:19:13 ]
- >>748
nilの実装はunsigned longの4だが? 環境によってはunsigned longじゃなくてもっと大きい型のこともあるが。
- 770 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:19:35 ]
- K&Rを難しいと言っているぐらいだからHaskellの遅延評価やモナドなんか常軌を逸するだろうな。
- 771 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:20:26 ]
- >>766
モルモン教とRubyにどんな関係があるんですか? 前々から気になっていましたが。
- 772 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:21:57 ]
- 大多数の大学生のような集団にとってきちんと理解しようとする場合「超難しいと言われてる」でいいと思う
- 773 名前:デフォルトの名無しさん [2008/09/09(火) 16:22:11 ]
- >>770
というか、Cのポインタが難しくてLispに逃げたくせに偉そうにするなww
- 774 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:26:14 ]
- にわかC使いがLL言語を叩くスレ
- 775 名前:730 mailto:sage [2008/09/09(火) 16:28:05 ]
- $ time ruby -e 'test = Array.new(100000){|i| i}'
real 0m0.220s user 0m0.120s sys 0m0.100s $ time ruby -e 'test = (0..100000).to_a' real 0m0.130s user 0m0.120s sys 0m0.010s 本当ですね。
- 776 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:35:27 ]
- >>775
それ、どういう処理なのか理解してないでしょ?笑えるんだけどw
- 777 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:36:26 ]
- >>771
Ruby開発者がばりばりのモルモン教
- 778 名前:デフォルトの名無しさん [2008/09/09(火) 16:37:03 ]
- まあ、どうあがいたってポインタは難しいからね・・・
- 779 名前:デフォルトの名無しさん [2008/09/09(火) 16:40:38 ]
- >>770
先生はモルモン教さんですか?
- 780 名前:730 mailto:sage [2008/09/09(火) 16:40:58 ]
- >>776
どういうメソッドが使われたかはプロファイラを使えばわかるみたいですね。 $ ruby -r profile -e 'test = (0..100000).to_a' % cumulative self self total time seconds seconds calls ms/call ms/call name 100.00 0.08 0.08 1 80.00 80.00 Range#each 0.00 0.08 0.00 1 0.00 80.00 Enumerable.to_a 0.00 0.08 0.00 1 0.00 80.00 #toplevel $ ruby -r profile -e 'test = Array.new(100000){|i| i}' % cumulative self self total time seconds seconds calls ms/call ms/call name 100.00 1.15 1.15 1 1150.00 1150.00 Array#initialize 0.00 1.15 0.00 1 0.00 1150.00 Class#new 0.00 1.15 0.00 1 0.00 1150.00 #toplevel
- 781 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:47:27 ]
- そういえば、さっきの妄想君は死んだのか?
- 782 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:50:15 ]
- K&Rのサンプル集とか面白かったんで、これと似たようなサンプル(課題)を是非コミュニティーでやってください!お願いします!
- 783 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 16:50:38 ]
- ブロック使う方は毎要素でyieldしてるからその差じゃね?
- 784 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 17:06:24 ]
- >>782
Rubyのサンプルに限らず他言語でのサンプルをRubyで書いてみたらいいんじゃね
- 785 名前:730 mailto:sage [2008/09/09(火) 17:09:44 ]
- 大まかにrubyのことがわかってきたので自己テストのためにリバーシプログラム書いてみますね。
- 786 名前:デフォルトの名無しさん [2008/09/09(火) 17:14:10 ]
- str=""
str << x str .concat x ま、好きな方を使え。どうせ行き詰まるんだろうけどw
- 787 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 17:29:07 ]
- >>750
書籍 「Rubyレシピブック」 お勧め。
- 788 名前:デフォルトの名無しさん [2008/09/09(火) 17:55:56 ]
- APIは熟読するぐらいに読まないと。
- 789 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 19:14:23 ]
- コード書いてるそばから一発でriやrefe2xでドキュメントを閲覧したり
ソースコード上の定義やCによる実装に飛べるようなエディタの支援が無いとキツイな
- 790 名前:730 mailto:sage [2008/09/09(火) 20:43:52 ]
- 質問です
ある変数が取り得る値の範囲をあらかじめ定めることは可能でしょうか? たとえば、代入時に0〜10までの値以外の値が代入されそうになったとき、 例外を発生させるようなメカニズムなど。
- 791 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 20:49:40 ]
- まずは初心者向けサイトで勉強したらどうよ?
- 792 名前:デフォルトの名無しさん [2008/09/09(火) 20:56:53 ]
- >>790
ある変数て… Ruby の変数には型がないって、このスレの今日の部分にも書いてあるよね とりあえず、入門書を読んでみなよ
- 793 名前:730 mailto:sage [2008/09/09(火) 21:04:08 ]
- >>792
それは理解しましたが、 私が聞きたいのは型に関することではなく(実質は型のようなものでしょうが)、 ヒューマンエラーで誤って100などの数字を代入しないよう、 安全な代入操作を行いたいだけなんです。 ヒューマンエラーで誤って100などの数字を代入しないために。
- 794 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:06:56 ]
- >>793
if文って知ってる?
- 795 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:08:48 ]
- レヴェルの低いのがからんどるな
- 796 名前:デフォルトの名無しさん [2008/09/09(火) 21:10:03 ]
- たぶんチンコがはえてないんだろw
- 797 名前:730 mailto:sage [2008/09/09(火) 21:10:37 ]
- >>794
代入文を書く直前にif文を書かずに済む方法はありますか?
- 798 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:11:01 ]
- >>790
オブジェクトという言葉を一度も使ってないことが気にかかる Rubyはすべてのものがオブジェクトだ 変数と呼ばれるものは、該当するクラスをnew(とか)して作ったオブジェクト(インスタンス)に名前を付けたものに過ぎない 変数という入れ物は存在しない オブジェクトというものについて勉強することを勧めるよ これを大まかにでも理解しないままRubyの勉強を進めるとか遠回り過ぎて気が遠くなる で、回答は 「オブジェクトに登録するときのメソッドをフックする、または専用の登録用メソッドを作成する」 というのが一般的だと思われる
- 799 名前:デフォルトの名無しさん [2008/09/09(火) 21:11:35 ]
- はよ初心者サイト行け
- 800 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:11:58 ]
- >>790
class C def foo=(v) raise if v < 0 || v > 10 @foo = v end def foo @foo end end o = C.new o.foo = 11
- 801 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:12:43 ]
- >>794
if文知ってるとチンコはえてきますか?
- 802 名前:730 mailto:sage [2008/09/09(火) 21:12:55 ]
- >>798
ありがとうございます。
- 803 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:13:17 ]
- >>790
ローカル変数やインスタンス変数に入る値(=代入されるオブジェクトの内容)を、自動的に制限する方法は 基本的には存在しない。テストで頑張るのが常道 ただし、アクセサメソッドを上書きすることで obj.parameter = 100 といった代入の形に限り、何らかの制限を行うことはできる
- 804 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:14:50 ]
- >>798 の毒され方が気になる
- 805 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 21:19:41 ]
- >>804
確かに、かなりの重症患者だろうな… ラムダ使いも、度がすぎると全く未知の方法を編み出すんだろう…
- 806 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 00:41:31 ]
- >>790
言語レベルで規制はできない。 やりたかったら、不正な値ならraiseするんかな
- 807 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 00:54:41 ]
- >>806
そのへんは一応>>798ではある、んだが Rubyにおける「変数のイレモノ」の実体はそれの指すオブジェクトだからな 他の言語における「変数作成時に何かしたい」は「オブジェクト作成・操作時に何かする」だろう というか、他の言語での変数ってデータのカタマリを指すラベルのようなものじゃないのか?
- 808 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 01:39:07 ]
- >>790の言語経験がわかんないよね。
アセンブリとかCOBOLとかperlとかかね。 案外Pythonとかhaskellとかバリバリ使ってるのに 釣りに来ただけだったりw
- 809 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 07:08:07 ]
- 「変数には型がない。オブジェクトには型がある。」
といくら説明しても理解できない人にぶちあたると徒労感でいっぱいになる。
- 810 名前:デフォルトの名無しさん [2008/09/10(水) 07:09:54 ]
- 関数型言語使ってる人とは、これほどパラダイムが違うなんて思ってもみなかったは…
- 811 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 10:03:17 ]
- >>809
そりゃその2つの間には関連性は希薄だからな 並べられて説明されるほど混乱するのはあたりまえだと思う
- 812 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 11:00:52 ]
- オブジェクトについてのことを変数の文脈の「型」を絡めて説明するのは誤解招いてキケンだと思う…
- 813 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:46:47 ]
- メタ議論は他所でやれ
- 814 名前:730 mailto:sage [2008/09/10(水) 12:57:05 ]
- オブジェクト指向でプログラミングするとバグ取りが大変ですね。
久しぶりにこの感覚味わいました。
- 815 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 14:52:26 ]
- Cだといくら難しくても構造体とポインタは避けて通れないからね…
- 816 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 15:03:12 ]
- 文法レベルで躓く男の人って・・・
- 817 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 15:40:58 ]
- Perlだと、呼び出しの後に関数の定義があっても、きちんと認識してくれるのですが、
--------------------------------------------------- func(); sub func { print "in func"; } --------------------------------------------------- 以下、Rubyだとエラーが出ます。 --------------------------------------------------- func #=>undefined local variable or method `func' for main:Object (NameError) def func print "in func" end --------------------------------------------------- エラーを出さないようにするには、関数を呼び出しの前に書くしかないのでしょうか?
- 818 名前:pl791.nas924.p-hokkaido.nttpc.ne.jp mailto:sage [2008/09/10(水) 16:30:23 ]
- >>817
Rubyには関数はない クラスやオブジェクトに関数があるということもない メソッドのことを関数だと解説している本やサイトがあるなら晒せ で、答はYES クラスやメソッドの定義式の評価は実行時に行われる 実行時ということは1行目から順に実行されてるときということで、 つまり定義前のメソッドが書かれてた場合はエラーだ まあぶっちゃけた話をするとすぐ慣れる 関数定義みたいに後ろに倉庫的にどっさりあったほうがすっきりするよねと思うことは今もあるが
- 819 名前:pl791.nas924.p-hokkaido.nttpc.ne.jp mailto:sage [2008/09/10(水) 16:31:19 ]
- お、何だ何だ
- 820 名前:デフォルトの名無しさん [2008/09/10(水) 16:50:03 ]
- 長い説明よりスクリプトの方にしてちょ
- 821 名前:p3070-ipad304kobeminato.hyogo.ocn.ne.jp mailto:sage [2008/09/10(水) 17:02:55 ]
- メソッドと関数の違いがわかりませんえん
- 822 名前:デフォルトの名無しさん [2008/09/10(水) 17:03:25 ]
- >>818
そもそもオブジェクト指向というパラダイム自体不細工。 所詮は商業主義の世迷い事。 いかにも新しいことを考えましたよ、って言いたいがために新しい言葉を作っただけのこと。 本来はメソッドは関数と呼ぶべきだし、クラスも構造体と呼ぶべき。
- 823 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 17:33:18 ]
- >>822 には触れないほうがいいよ
- 824 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 17:41:30 ]
- >>818
サンクス 了解しました
- 825 名前:デフォルトの名無しさん [2008/09/10(水) 17:52:18 ]
- >>823
型理論よりもちゃんとした理論体系が確立されているんですか? 間違いを通そうとして話をそらさないでくださいよ。
- 826 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:18:59 ]
- オブジェクト指向の次って何があるの?
- 827 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:19:39 ]
- >>825
そういう事は、それ系のスレかお前さんのブログでやってくれ。 Ruby のスレでオブジェクト指向のパラダイムを受け入れてるのは当たり前だろ。
- 828 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:25:16 ]
- 変数とオブジェクトの違いも曖昧な奴に、オブジェクト指向を語れるのか?
>>827と同じ意見だけど…
- 829 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:25:51 ]
- しかしよく釣れるスレだなw
- 830 名前:デフォルトの名無しさん [2008/09/10(水) 18:26:42 ]
- >>828
誰と混同してるんだ?
- 831 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:32:31 ]
- >>826 エージェント指向とかアスペクト指向とか
- 832 名前:デフォルトの名無しさん [2008/09/10(水) 18:32:57 ]
- なんだ厨房しかいないのかw
- 833 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:36:30 ]
- >>826
遅延評価、monad、arrow、pi-calculus
- 834 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:39:01 ]
- >>831
エイジェント指向ってのは一つのプログラムを作るための概念ではないよ。 もっとマクロな協調動作を目指したもの。 クラスタとかグリッドとかそっち方面の技術だよ。
- 835 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:40:20 ]
- 技術ではなくて概念 か。
- 836 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 19:16:46 ]
- 「能」という漢字を扱おうとすると必ず
unterminated string meets end of file というエラーが出ます。どうしてでしょうか?
- 837 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 19:17:43 ]
- ほかの漢字のときは大丈夫なんです。
「芸能」がダメで、「芸」はOKなんです。
- 838 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 19:27:56 ]
- さあいますぐ
能 能\ それぞれをShift_JISで保存してバイナリエディタで開いてみるんだ
- 839 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 21:19:16 ]
- >>837
偉大なるKENT様のご説明 文字化けについて www.kent-web.com/pubc/jcode/index.html
- 840 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 21:47:26 ]
- KENT様・・・
- 841 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 22:42:40 ]
- >>801
うん。ひと晩で二、三本は生えてくるよ
- 842 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 22:43:37 ]
- 何で朝鮮人は嫌われてるんですか?
- 843 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 22:56:51 ]
- >>842
汚くて臭いからさ
- 844 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:42:15 ]
- >>831
アスペクト指向はオブジェクト指向の二番煎じ。 ITバブル時代に新しい言葉を作ってビジネス機会を作ろうと企んだが失敗に終わりそうな概念です。 ほかにもajaxとかWEB2.0とか、いろんな言葉が作られて消えていきましたが、 全部商業主義的な目的から作られた物です。 この業界をかき乱すのもそろそろやめてほしい。
- 845 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:44:57 ]
- 新しくも無いのにわざわざ特別な名前を与えていかにも新しくてすごそうに見えるように宣伝して儲ける手法。
全部誰かが裏で糸を引いているんじゃないかと思うほど手口が似ています。
- 846 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:10:05 ]
- >>844
あんたが「本物のプログラマ」だという事はよく分かったから、 お菓子好きの集まるこのスレにはこないでくれ。
- 847 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 07:48:45 ]
- >>844
ハスケルは学者ばかりですし、そっちではたくさん高級なメタ議論してますよ。
- 848 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 07:58:38 ]
- だからさ,スレ違いだしもう触れるな,っての
- 849 名前:mx.narihara-lab.jp mailto:sage [2008/09/11(木) 08:38:43 ]
- >>844
> アスペクト指向はオブジェクト指向の二番煎じ。 そうなの? 「MOP の二番煎じ」だとばかり思ってたんだが…
- 850 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 20:56:56 ]
- Web2.0が商業用語ってどんだけ
商業にすらなってないわ
- 851 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:06:21 ]
- >>850
今日のおまんこの締まり具合はどうですか?
- 852 名前:730 mailto:sage [2008/09/11(木) 21:08:49 ]
- 質問です
シンボルを宣言するとき:hogeのように記述しますが、 「:」というのはメソッドなのでしょうか? 「:」のようなメソッドを宣言する方法を教えてください。
- 853 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:27:10 ]
- >>852
メソッドじゃない。 つーかいい加減マニュアル読めよ
- 854 名前:デフォルトの名無しさん [2008/09/11(木) 21:30:26 ]
- RubyスクリプトがOut of memoryで終了してしまうんですが
どこでメモリ消費してるのか調べるプロファイリングツールみたいのはありますか?
- 855 名前:730 mailto:sage [2008/09/11(木) 21:33:41 ]
- >>853
どこに書いてありますか?
- 856 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:40:14 ]
- Stringを作るための ' や Array を作るための [ と ] がメソッドじゃないのと同じようなもんだな
- 857 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:41:57 ]
- >>854
ruby -profile hoge.rb ただし、これは死ぬほど重いので、rubygem の ruby-prof とかを使う
- 858 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:48:56 ]
- >>855
www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.a5.b7.a5.f3.a5.dc.a5.eb
- 859 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:49:09 ]
- >>855
だから聞く前に読めよ
- 860 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 21:51:27 ]
- Out of memory は RubyMagick でよく見たなあ
- 861 名前:730 mailto:sage [2008/09/11(木) 22:02:15 ]
- >>858
ありがとうございます
- 862 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 23:41:24 ]
- 煽るような回答しかしてない人はわからないんですね、わかります。
- 863 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 08:40:45 ]
- 何を聞きたいのかイマイチ不明。
|

|