- 1 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:26:33 ]
- プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
【Ruby1.9 は不安定な開発版であり初心者には全く向きません】 【最新安定版の Ruby1.8.6 の使用を強くお勧めします】 関連スレや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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 752 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:02:22 ]
- 初心者スレであんまり「gemのlibhogeを使え」なんていわないほうが
いいんじゃにゃいかな。そりゃ業務的には正解だけど、たぶん牛刀割鶏になってるよ。
- 753 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:09:36 ]
- rubygems に代表される公開ライブラリを流用するのは何故かというと
「自力でゼロからまたアレやるのめっちゃ面倒だ」 という認識があるからなんだよな 「面倒なアレ」という経験が無いうちから使うと後々悲惨な結果に 苦労は初心者のうちにしておくとよいと思う
- 754 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 14:24:14 ]
- あほらし
- 755 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:33:14 ]
- 別に両方教えればいいだけじゃん
html = File.read('page.html') html.scan(/<(.*?)>/) { p $1 } と >>750 の両方。 もちろん違う人が教えてもいい。
- 756 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 16:33:30 ]
- URI.extractでもつかっとけ
- 757 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:38:20 ]
- 文字出力、正規表現の際に'可能'という文字を使用したいのですがうまくいきません。
試しに以下のスクリプトでテストしてみました。 ファイルをSJIS保存 puts '能' => unterminated string meets end of file ファイルをUTF8保存 puts '能' => '閭ス' となってしまいます。 どうすれば扱えるのでしょうか? どなたか本気でお願いします。
- 758 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 17:51:51 ]
- Shift_JISの場合は ruby -Ks hoge.rb で起動
UTF-8 の場合は ruby -Ku hoge.rb で起動
- 759 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 20:40:06 ]
- >>757
rubyは基本的に、何も指定しないと日本語を正しく扱えない 詳しくはリファレンスマニュアル(もしくは書籍)を読め
- 760 名前:757 mailto:sage [2008/06/07(土) 21:39:01 ]
- ありがとうございます!
無事に出力&正規表現が実行できました。 ファイル毎に記述する癖をつけます!
- 761 名前:デフォルトの名無しさん [2008/06/07(土) 22:46:14 ]
- String#split* という関数はどういう挙動なのでしょうか?
文字列がかえるので split().join と同じだと考えていたのですが どうにも違うようですし調べてもでてこないし リファレンス(コードでもいいので)ご存知のかたいたらおねがいします
- 762 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 22:48:02 ]
- 1while などアンドキュメントな部分などの部分もご存知のかた
いたら同様に示唆していただけたらありがたいです ruby 二日目であほなこといっていたらごめんなさい
- 763 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:06:41 ]
- String#split* なんて関数は見たことない
split().join, 1while ともども簡単なコードも付けてくれると答えやすいかも あるいはどこに書いてあったとか
- 764 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:11:34 ]
- >>761
正直、Ruby の引数展開の * はあまり好きではない あれは Ruby として明示的なメソッドであるべきだと思う んで、引数の配列の直後に * をつけると展開して引数に渡される arr = [1, 2, 3] hoge(arr*) は hoge(1, 2, 3) と同じ動作だ 文字列を split した結果の配列が展開されて渡されてるということだな split は引数を省略すると空白で分割して配列を返すから hoge('1 2 3'.split*) は hoge(1, 2, 3) と同じ 正直、あまり明快な記述とは思えないので、自分から使うのは避けたほうがよい
- 765 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:23:51 ]
- >>763, 764 ありがとうです。
>>763 ゴルフコードでよくみたのでこれなんだろーなっていう shinh さんのとこから tree = '(Root (Spine (Neck (Head)) (RClavicle (RUpperArm (RLowerArm (RHand)))) (LClavicle (LUpperArm (LLowerArm (LHand))))) (RHip (RUpperLeg (RLowerLeg (RFoot)))) (LHip (LUpperLeg (LLowerLeg (LFoot)))))' tree.scan(/ \((\w+)/){puts"#$+ . #{a=$`.split*'';1while a.sub!(/\(\w+\)/,'');a[/\w+$/]}"} ってなかんじで 1while はブロックをともなわない構文なのかなと perl と同じ と思っていました while gets; end -> 1while gets でできるかんじ? で split* があるのかなと考えたのは >> "abcd".split*'' => "abcd" >> "abcd".split* '' => "abcd" >> "abcd".split*('') => "abcd" >> "a bcd".split*('') => "abcd" >> "a bc d".split*('') => "abcd" >> "a bc d".split*(',') => "a,bc,d" >> "a bc d".split('') => ["a", " ", " ", " ", "b", "c", " ", "d"] >> "a bc d".split('') で返り値が array ではなく string なので引数展開ではないのかなーと 考えています
- 766 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:25:26 ]
- 展開の * は前につくんだったと思うんだが
hoge(*arr) あと、配列 * s が 配列.join(s) と同じ動作になるのは s が文字列だったときだけだぞ s が整数だったときには単に繰り返される だから、to_s や to_i が乱れ飛ぶ初心者のスクリプトでは紛らわしいから使ったら駄目 というか、そもそも紛らわしいから素直に join 使え
- 767 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:36:09 ]
- >>765
1whileはrubyの標準にはない。たぶんコードゴルフ用の拡張 ついでに言うと、初心者がコードゴルフを参考にするのは薦められない あれは一般的に美しくない(分かりにくい)書き方が多いから
- 768 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:47:03 ]
- >>762
違ってたらごめんね >> "abcd".split() * '' => "abcd" >> print 1while true 1111111111111 >> while true; print 1; end 1111111111111
- 769 名前:デフォルトの名無しさん mailto:sage [2008/06/07(土) 23:57:22 ]
- >>768
ruby のコードながめていたらおっしゃる通りだと思いました 1while でも 1 while でも同じことで kWHILE のみしかなかったでした orz 1 while() { ...} なども添付コードにあったので変態的な構文解析だなぁと split() もそうだとおもいます >> a="a b cd".split() => ["a", "b", "cd"] >> a *'' => "abcd" >> a *'abc' => "aabcbabccd" >> a.*'abc' => "aabcbabccd" >> a.*'' => "abcd" コメントみなさんありがとうございました
- 770 名前:デフォルトの名無しさん mailto:sage [2008/06/08(日) 00:00:25 ]
- 追記
www.ruby-lang.org/ja/man/html/Array.html#self.20.2a.20times ですね ありがとうです
- 771 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:03:39 ]
- Ruby1.6で書かれたクラスを利用しないとアクセスできないシステムがあります
そのシステムはEUC_JPしか受け取れないため、他のエンコードを使用しようとした場合は変換したいと考えています ですがRuby1.6時代のKconvではUTF-8→EUC_JP変換ができません そこで質問なのですが ・Kconvに限ってRuby1.8のクラスファイルを利用する、などといったことは可能ですか? ・指定ファイルはRuby1.6、それ以外はRuby1.8というようにクラス/ファイル別にインタプリタを指定して実行することはできますか? 現在は一時ファイルに実行結果を書きとめておくことで疑似的に実現していますが、よりスマートな方法がありましたらご教示願います
- 772 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:12:05 ]
- nkf.cだけ差し替えてコンパイルしてみるとか。
よしだむ氏のuconvを使ってみるとか。
- 773 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:15:53 ]
- 1.6のUTF8関連はuconv使ったような記憶がある
というか、1.8で動かない上に書き換えも面倒な1.6のスクリプトって重症だなあ マニアさんが書いたようなスクリプトですかね
- 774 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:28:32 ]
- でっかーいスクリプトだと1.8対応にするのはゼロから作り直すに等しい作業になりそうだな
1.6で完全に動いてるならそのまま使いたいとこだろう Uconv試すのが一番だと思うぜ
- 775 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 00:30:55 ]
- UTF対応の外部NKFのラッパーを自前で書くというのはどう
Kconvの中の人がやってることは同じだし 一時ファイル使ってる現状とほとんど変わらないような気もするけどな
- 776 名前:771 mailto:sage [2008/06/10(火) 08:29:09 ]
- 皆さんありがとうございました
Uconvの使用が一般的な方法のようですので、まずはこの方法でやってみたいと思います
- 777 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:34:19 ]
- index.rhtmlからtest.rbをrequireすると
エラーは出ないのですが、test.rb内に記述された関数群が利用できずにエラーとなります。 この拡張子でのrequireは無理なのでしょうか? もしそうであれば、どのようにファイル分けをすればよいのでしょうか? よろしくお願いします。
- 778 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 17:52:54 ]
- エスパー麻美の出番だな
- 779 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 18:02:07 ]
- エスパー…あさみ…?
- 780 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 19:00:07 ]
- ビーズで撃たれて死んでしまえ
- 781 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 19:12:57 ]
- 魔女ステかよ
- 782 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:37:07 ]
- ダック・タイピングとよく言いますが、
オブジェクトが目的のメソッドを持っているかどうかの責任は、 プログラマにあるということでしょうか?
- 783 名前:デフォルトの名無しさん mailto:sage [2008/06/10(火) 21:39:05 ]
- スクリプト言語でなおかつ動的にクラスもメソッドも追加可能な言語では
「ユーザー」と「プログラマー」の間が曖昧なんだよね
- 784 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:33:42 ]
- よくわからんが、処理系が実行時まで何もしてくれないことだけは確か。
- 785 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 10:59:33 ]
- >>778
洗剤か
- 786 名前:デフォルトの名無しさん mailto:age [2008/06/11(水) 12:05:00 ]
- Rubyのバージョンアップ方法に関してどなたかお力を貸して頂けないでしょうか。
現在CentOS4.5上で下記のパッケージでRubyを動作させております。 ruby-1.8.5-1.el4.centos ruby-docs-1.8.5-1.el4.centos ruby-libs-1.8.5-1.el4.centos ruby-irb-1.8.5-1.el4.centos ruby-devel-1.8.5-1.el4.centos ruby-ri-1.8.5-1.el4.centos ruby-rdoc-1.8.5-1.el4.centos ruby-tcltk-1.8.5-1.el4.centos 今回Rubyのバージョンを1.8.6へあげたいと考えておりますが下記の エラーに遭遇してしまい検索してみた物の./configureが出来ない状 態です。。 【エラー】 checking for C compiler default output file name... configure: error: C compiler cannot create executables See `config.log' for more details. 〜続く〜
- 787 名前:786 mailto:sage [2008/06/11(水) 12:06:09 ]
- 【config.logを見て該当すると思われる箇所】
gcc version 3.4.6 20060404 (Red Hat 3.4.6-9) configure:2530: $? = 0 configure:2537: gcc -V >&5 gcc: `-V' option must have argument configure:2540: $? = 1 configure:2563: checking for C compiler default output file name configure:2590: gcc conftest.c >&5 /lib/libc.so.6: undefined reference to `_dl_out_of_memory@GLIBC_PRIVATE' collect2: ld returned 1 exit status configure:2593: $? = 1 configure:2631: result: configure: failed program was: | /* confdefs.h. */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | #define USE_BUILTIN_FRAME_ADDRESS 1 | /* end confdefs.h. */ | | int | main () | { | | ; | return 0; | } configure:2638: error: C compiler cannot create executables See `config.log' for more details.
- 788 名前:786 mailto:sage [2008/06/11(水) 12:08:41 ]
- 【gcc関連インストールされている物】
compat-libgcc-296-2.96-132.7.2 compat-gcc-32-3.2.3-47.3 gcc-3.4.6-9 gcc-g77-3.4.6-9 gcc4-c++-4.1.2-14.EL4 gcc-objc-3.4.6-9 gcc-gnat-3.4.6-9 compat-gcc-32-c++-3.2.3-47.3 libgcc-3.4.6-9 gcc-java-3.4.6-9 gcc-c++-3.4.6-9 gcc4-4.1.2-14.EL4 gcc4-gfortran-4.1.2-14.EL4 gcc4-java-4.1.2-14.EL4 2日程格闘中ですが、お手上げ状態に近づいて来ました。。。 RPMで1.8.6があればいいのですが該当するものも無いため 今回tarからrpmをcheckinstallで作成しようと考えてお ります。。
- 789 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 13:28:15 ]
- >>787
に書いてあるがな。GNU libcの `_dl_out_of_memory@GLIBC_PRIVATE' がないんだろ。glibcを入れ直してldconfigしてみろ
- 790 名前:786 mailto:sage [2008/06/11(水) 13:46:57 ]
- >>789さん
助言有り難う御座います。glibc関連を弄るのは初めて なので依存関係でしくじる気が凄くしますが取り敢えず 調べてやってみます。
- 791 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 16:56:35 ]
- oreilly.co.jp -- Online Catalog: 初めてのRuby
ttp://www.oreilly.co.jp/books/9784873113678/ > 本書を最後まで読めば、「Rubyリファレンスマニュアル」を自在に読みこなし多様なRubyライブラリを活用して、 > 自力で高度なRubyプログラミングを習得するだけの基礎知識が手に入るでしょう。 > Ruby1.8及び1.9に対応しています。 ( ^ω^)おっおっおっ
- 792 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:02:16 ]
- 夢のような書籍だなw
- 793 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:14:19 ]
- たった224ページじゃ無理だろと思ったら
>他言語でのプログラミング経験を持つ人を対象に なるほど。エッセンス部分だけ凝縮することに成功すれば あるいは・・・・・・
- 794 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:17:59 ]
- 魚を捕る方法を教える感じでなかなか好感が持てる
現状、9割くらいの人はオンラインのリファレンスマニュアル読んでるからな というか、リファレンスマニュアル自体にマニュアルの読み方の解説がないというのが情けない
- 795 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 17:19:59 ]
- まああるいはオライリーの人がフカしてるだけかもしれん
これ目次ね ttp://www.oreilly.co.jp/books/9784873113678/toc.html
- 796 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:21:21 ]
- また安いなw
最近のオライリーはどうなってるんだ,あれこれ安すぎるw
- 797 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 19:42:21 ]
- 自分の部屋の本棚をオライリーで埋め尽くす・・・
そんな風に考えていた時期が僕にもありました・・・
- 798 名前:デフォルトの名無しさん [2008/06/11(水) 19:58:37 ]
- 2,310円?200ページとはいえ、オライリーにしてはえらく安いな
- 799 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 20:58:19 ]
- >>796
質が落ちたから
- 800 名前:デフォルトの名無しさん mailto:sage [2008/06/11(水) 22:33:03 ]
- Learning Rubyの翻訳かと思ったら別の人が書くのか・・・
当然のようにFlanagan x Matz本出してくるかと思ってたが マニングのMinimal Perlがオラから出てたりとかなんかカオスだな
- 801 名前:高野光弘問題 [2008/06/11(水) 23:58:28 ]
- takano32,TAKANO Mitsuhiroこと高野光弘(日立製作所社員、日本UNIXユーザ会幹事)が、
自身の『32nd diary』で公然と日立の機密を開示し、障害者差別発言をしている問題。 1981年11月12日 千葉県のディズニーランドのそばで誕生 2001年4月1日 千葉大学に入学 2005年4月1日 千葉大学大学院へ進学、日本UNIXユーザ会に入会 2007年4月1日 日立製作所に入社、神奈川県秦野市の寮へ 2007年8月22日 「ついに職場で人が倒れた」と公表 2007年11月13日 「情報漏えい」を言う上司に「死んだほうがいいよ」と暴言 2007年12月28日 「社内システムクソうんこ」と発言し、仕組みも暴露 2008年5月23日 機密漏洩問題について一応の謝罪 2008年5月26日 「給料泥棒とかうんぬん言われた」と謝罪を忘れて告白 2008年5月27日 「心バキバキ川田くん」と前日の発言者の名前を公言 2008年5月31日 「キチガイ」と日立のユーザーに障害者差別発言を連発 2006年10月27日(日立製作所に入社前に忠告されたこと) 「日記やコメントの投稿日時から勤務時間に業務外のことをしていることが判明」は 某社の某親会社が 2ch で祭られたように、NG です。 6月も勤務時間中に更新し続ける高野光弘君の『32nd diary』にツッコミをどうぞ
- 802 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:02:01 ]
- で、rubyとどう関係あるのか
まだ訊いてないんだが?
- 803 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 04:22:05 ]
- Ruby信者はあらゆるスレにRubyの話題を持ち込んでいるのだから、
逆にあらゆる話題がRubyスレに持ち込まれても、身から出た錆だな。
- 804 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 06:59:14 ]
- RubyってJavaのクラスローダーみたいな仕組みはないのですか?
- 805 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 09:46:01 ]
- >>804
requireじゃダメなの?
- 806 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 10:07:44 ]
- 「Javaのクラスローダーの○○の仕組み」と限定して欲しいとこだな
- 807 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 11:17:08 ]
- .jarとか.classとかを実行時に読むのに相当するならrequire、
Classオブジェクトを名前な文字列とかで引っ張ってくるならModule#const_get
- 808 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:39:27 ]
- ネットワーク上からRubyスクリプトを受け取ってそれに記述されているクラスを動的に定義したいんだけど
たとえば script = URI("host/matz.rb").read p script #=> # class Matz # def hige # print "じょりじょり" # end # end eval(script) Matz.new.hige こんな感じで実現できるんだけど もっとスマートな方法は用意されてないの? ファイルには書き出したくない。
- 809 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:41:29 ]
- Ruby で、現在のプロセス名を得ることはできますか。
やりたいのは、現在のコマンドが /usr/bin/ruby なのか /usr/local/bin/ruby なのか /usr/local/ruby1.9/bin/ruby なのかを知ることです。
- 810 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:43:42 ]
- ローカルファイルシステム上にないファイルをスクリプトとして読み込みたいとかいう需要に対してスマートも糞もねーよ(w
require の中身は eval だからそれで正しい動作だ 我慢しとけ
- 811 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 21:46:53 ]
- >>810
> require の中身は eval それは知らなんだ・・・
- 812 名前:デフォルトの名無しさん mailto:sage [2008/06/12(木) 23:20:56 ]
- Rubyで、
メタ・プログラミングやコード・ジェネレーションを学びたいのですが、 その辺を詳しく扱っている書籍やサイトはないのでしょうか? ピッケル本とか読みましたけど、なでる程度しか載っていないので・・
- 813 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 01:55:27 ]
- >>812
今は懐かしい256シリーズの無道編でRaccをフィーチャー(というか宣伝)してる。 でも無知な俺は、Raccを本当に活用した例ってRDtoolしか知らない。 Rubyでメタプログラミングなら、強力なevalとmethod_missingで対応するDSLが主流だね。 ActiveRecordなんか、その最たるもの。 Rubyist Magazine -あなたのコードを添削します- jp.rubyist.net/magazine/?0011-CodeReview DSLについて、一部参考になるかも。
- 814 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 02:34:00 ]
- これとか。
ola-bini.blogspot.com/2006/09/ruby-metaprogramming-techniques.html
- 815 名前:デフォルトの名無しさん [2008/06/14(土) 18:53:09 ]
- プロパティを定義したいのですが、セッターがうまく働きません orz
以下のようにすると、2と表示してほしいのですが、5と表示されてしまいます。 どこが間違っているのでしょうか? #ruby -Ku class Calculator def initialize @unit = 5 end def unit=(value) @unit = value end def run unit = 2 puts @unit end end Calculator.new.run
- 816 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:55:36 ]
- self.unit = 2
- 817 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:55:59 ]
- self.unit = 2
- 818 名前:デフォルトの名無しさん [2008/06/14(土) 18:56:17 ]
- self.unit = 2
だとうまくいきました 何だこの違い・・・ ほかの言語のプロパティみたいに使っちゃだめなのか
- 819 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 18:59:52 ]
- わかるまでは attr_accessor :unit とだけ書け。
- 820 名前:デフォルトの名無しさん [2008/06/14(土) 19:02:42 ]
- この挙動はどういうことなんでしょうか?
ドキュメントのどこかに記載などありますでしょうか? しかし、エラーなどでずに実行されるもんで子一時間悩んでしまいました >>819 セッターを拡張したいときには使えません あれは最小限のコードで実際のコードでは、最大値のチェックなどしています。
- 821 名前:デフォルトの名無しさん [2008/06/14(土) 19:04:05 ]
- >>819
試しに attr_writerを使ってみましたが、やはりselfがいりますね・・・。
- 822 名前:デフォルトの名無しさん [2008/06/14(土) 19:08:52 ]
- ああああ、わかた。
宣言が要らない言語だから、セッターのインスタンス省略すると ローカル変数への新規代入になるのか orz
- 823 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:11:24 ]
- >>822
Ruby以外はどんな言語を使ってるのか教えてくれまいか ちょっと興味があるんだ
- 824 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 19:17:11 ]
- これは筋のよさそうな自称初心者
- 825 名前:デフォルトの名無しさん [2008/06/14(土) 19:33:13 ]
- >>823
他にはDelphiを長年つこーてました。 Delphiだと属性でなくてプロパティなんですが、 上記コードのような形で問題なく、 selfなしでクラス内でプロパティに代入できます。 静的な言語のせいもあり、変数は宣言しないと使えないです。
- 826 名前:デフォルトの名無しさん mailto:sage [2008/06/14(土) 20:04:10 ]
- なるほど、丁寧にありがとう
今度Delphiのコード見かけたら そこらへんちょっと気にして読んでみるよ
- 827 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:03:24 ]
- やさしいやりとりだな。いい感じ。
- 828 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:24:46 ]
- これは珍しく建設的なやりとり。
- 829 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 00:45:06 ]
- 初心者側に「ピンと来る力」があれば、話は俄然充実するんだよ。
- 830 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 03:02:58 ]
- >>820
> ドキュメントのどこかに記載などありますでしょうか? 一応rubyの落とし穴には書いてあるけど見つけにくいね。 www.ruby-lang.org/ja/man/html/trap_A5B9A5B3A1BCA5D7A1A2C0A9B8E6B9BDC2A4.html attr_xxx もFAQやModuleのリファレンス見ないと分からないし。 まぁリファレンスだからしょうがないか。 入門書ならselfが必要なことも含めてちゃんと書いてあるかも。
- 831 名前:815 [2008/06/15(日) 06:40:18 ]
- >>830
おお、こんなところに記述が やはりFAQなのですね。 わざわざありがとうございます。 attr_系の説明やサンプルは大概クラス外部からのアクセスのみかかれてますね。
- 832 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 12:41:53 ]
- a = [1,1]
a.each{|i|a << a[-1] + a[-2] if a[-1] < 10000} p a
- 833 名前:デフォルトの名無しさん [2008/06/15(日) 15:21:02 ]
- Rubyの入門サイト、書籍などを読んでいると
破壊的なメソッド、非破壊的な〜、みたいな表現をよく目にします。 Ruby以前の言語でも同じ概念は存在すると思うのですが、 Rubyにおいて敢えて強調されているのは何故なんでしょうか。 例えば、何か他の言語とは異なった考え方が必要になってくるのでしょうか。
- 834 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 15:24:50 ]
- >>822
NetBeans使ってると、unitは未使用ということでエディタ上に印が付きますね。
- 835 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:12:43 ]
- >>833
強調するのは、そりゃ、「2種類」あるからだよ self を変更するかどうかって重要じゃん puts させただけでそのオブジェクトがそれ以降文字列になったら悲惨じゃん
- 836 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:16:47 ]
- >>834
ねとびんかしこいねねとびん
- 837 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:20:09 ]
- >>835
だから、その2種類の違いを他の言語より強調するのは何故か、という質問だろ。 他の言語がどの言語で、本当にそれよりRubyのほうが強調されているのかは俺はわからんが、 ともあれ比較の質問なら、Rubyの意志を比較で回答しないと納得はできんだろう。
- 838 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:32:14 ]
- 例えば、javaでは
メソッドへパラメータを渡すとき 配列とオブジェクトは参照渡し(rubyでいう、非破壊的・・の概念にあたる) プリミティブ型は値渡し(破壊的・・の概念にあたる) になってる。 ソースを見たとき、 Rubyのように明確になっているとは、ちょっといえないかもね。 Cだと、ポインタかどうかで判断する。 どうしてRubyはその辺を強調してるかだけど、 自由度が高いからじゃないかな? 上のJavaの例でいうと、参照渡しした元のオブジェクトを呼び出し先から 操作することは、Javaでは出来ない。 Rubyではその辺を任意にできる操作できるようにしたかったから、 出来る場合と出来ない場合を明確に表記して、わかりやすくしたかったのではないかと 推察します。
- 839 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:38:16 ]
- すみません。
>上のJavaの例でいうと、参照渡しした元のオブジェクトを呼び出し先から >操作することは、Javaでは出来ない。 上のJavaの例でいうと、値渡しした元のプリミティブ型を呼び出し先から 操作することは、Javaでは出来ない。 の間違い。 失礼しました。 参照渡し>>元のオブジェクトのリファレンス(アドレス、ポインタ)を渡す。(破壊的) 値渡し>>元のデータのコピーを渡す。(非破壊的) です。 混乱させるような、書き込みをしてすみません。
- 840 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 16:52:41 ]
- >>837
破壊的なのに!とか述語に?をつけるのはschemeからのいただきだろうな。 ただ、単なる慣用だから守ってないライブラリもいっぱいあるし深い意味はないんじゃね? 強いて言えば、識別子に!とか?が使えるってのを強調したかったとか。 C/perl/pythonは出来ないはずだし。
- 841 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:11:55 ]
- >>833
Rubyだから特別強調しているというわけではない。 Rubyに限らず、手続き(Rubyの場合メソッドかProcオブジェクト)を実行すると きに、その手続きを実行する前から存在していたすべてのオブジェクトについ て 実行後、状態が変化する可能性がある(から注意して使え)のが「破壊的」 実行後、状態が変わらないことを保証するのが「非破壊的」 うまく説明できないけどこんな感じだ。状態が変わらないというのは「同じ」 ということなんだけど、じゃあ「同じ」とは何かというのがなかなか微妙。 だけどこの話を始めるとなが〜くなるから、この辺でやめとくぞ。 >>838,839 はなんか間違って理解してるみたいだぞ
- 842 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:36:53 ]
- >>833
rubyの場合、他言語に比べてメソッドチェインの色合いが強いからじゃなか 他言語では戻り値がvoidになるようなものでも、rubyだとself返したりしてるし
- 843 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 17:58:46 ]
- でも述語に?を使われると、三項演算子がちょっと見にくくなるよね
a = (isTrue?) ? 12 : 47
- 844 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:20:21 ]
- >>839
とりあえずJavaに参照渡しはない プリミティブはもちろん値渡しだが オブジェクトだって値渡し(参照の値渡し、あるいはcall by share)だ とかいっても>>839は信じてくれないって俺は知ってるんだ
- 845 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:30:36 ]
- (´・ω・`) = (!isTrue?) ? !a.foo? : !b.foo?
- 846 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:32:53 ]
- hamlet = (to?) ? be : !be
- 847 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 18:42:35 ]
- >>833
単にメソッド名に!が付けられることを自慢したかっただけ。
- 848 名前:デフォルトの名無しさん [2008/06/15(日) 19:15:36 ]
- >>833
オブジェクト使い捨てることによって生まれたメソッドチェーン主体の手法と、 従来のインスタンスへの変更を区別するためだろう か
- 849 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 21:30:31 ]
- >>847
確かに、そんな気もしなくは無いですね…
- 850 名前:デフォルトの名無しさん [2008/06/15(日) 22:04:22 ]
- rubyで日本語の分かち書きがやりたいよん
- 851 名前:デフォルトの名無しさん mailto:sage [2008/06/15(日) 22:17:38 ]
- たとえば
mecabを直に叩くか mecabのrubyライブラリを使うか mecabのデータだけを使わせてもらって自分でがんばるか
- 852 名前:デフォルトの名無しさん [2008/06/15(日) 23:09:39 ]
- >>851
ありがとうございます (いまさら)環境 ActiveScriptRuby ・mecab for rubyがインストールできなかった ・↓を参考に直叩き でできました Windows上のrubyでMeCabをちょっこっと使ってみたい - Programming Must Go On d.hatena.ne.jp/kenkitii/20060705/p1
|

|