1 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 13:56:36 ] プログラミング言語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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
29 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 20:54:48 ] >>26 c++ の人ならlambdaはC++にもある(boost)から概念ならそこから理解できるはず
30 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 20:57:47 ] >>27 irb> "str" == "str" true irb> "str".equal?("str") false ということで String#equals? >>28 そう複雑でもない プリミティブなクラスを発明しない限り普通は === も eql? も再定義することはない クラスごとに「おなじとみなしていいもの」の判定を == で定義すればいい
31 名前:27 mailto:sage [2010/03/23(火) 21:38:42 ] >>28 複雑だとは思いませんが、条件式としては微妙だと思います >>28 ,>>30 ありがとうございます
32 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 21:49:02 ] rubyにはconstやfinalのみたいな、再代入を防ぐ方法は無いんですか?
33 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 21:50:29 ] 普段使うのは == と equal? だけだな >>32 Object#freeze
34 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 21:55:08 ] >>32 ない 変数名の再使用を禁止することはできない オブジェクトの内容が変更されることを防ぐことならできる のが>>33
35 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:08:38 ] 定数(名前が大文字から始まる変数)がいちおうそれだけど、効力としては警告止まり 警告を無視するようなバカには効果はないが javaと違って基本的にプログラマを疑っていない言語だからそこは割り切ってくれ
36 名前:26 mailto:sage [2010/03/23(火) 22:23:55 ] >>29 ありがとう。Boostは使ったことない
37 名前:32 mailto:sage [2010/03/23(火) 22:25:40 ] >>33-35 ありがとうございます まだrubyプログラミングに慣れていないので、間違えて再代入しないようにしたかったのですが ムリぽですね
38 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:26:58 ] そもそもそういう動機で再代入を禁止してはいけない
39 名前:デフォルトの名無しさん [2010/03/23(火) 22:30:04 ] Haskellやればいい
40 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:00:36 ] グーニーズくるー?
41 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 10:19:10 ] 現在、Threadが実行中か調べる方法を教えてください
42 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 10:25:25 ] Thread#status
43 名前:デフォルトの名無しさん [2010/03/24(水) 10:25:51 ] t.status #=> "run" or "sleep" or "aborting" or false or nil t.alive? #=> true or false
44 名前:41 mailto:sage [2010/03/24(水) 10:52:29 ] >>42-43 ありがとうございます Rubyのスレッドって寿命があるんですかね Thread.start { for i in 1..10000 puts i end } 最後まで表示されないので
45 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 10:56:51 ] …あれ、なんだこれ
46 名前:41 mailto:sage [2010/03/24(水) 10:58:41 ] メインのスレッドが終わっているから、全部表示されないのかも
47 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 11:03:47 ] t = Thread.start { for i in 1..10000 puts i end } t.join
48 名前:41 mailto:sage [2010/03/24(水) 11:12:33 ] >>47 そこまで、すぐにわかりました IOに時間がかかるので、GUIを描写を止めないようにしたいんです def〜endの間でしかスレッドを使えないんですかね? デーモンみたいな感じで使えたらいいんですが def hoge t = Thread.start{} end
49 名前:41 mailto:sage [2010/03/24(水) 12:43:59 ] def buttonPush ←ボタンがクリックされた時に呼び出される t = Thread.start{ 適当な処理(時間がかかる) storeBinary() } end def storeBinary 大きいデータを書き込む end buttonPushが呼び出された時に、GUIを止めたく無いんです
50 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 13:09:52 ] よくわからんけど、バックグラウンド処理用のスレッドを管理する仕組みを作って GUIのスレッド(ここではbuttonPush)から呼び出すとかじゃダメなのかな。
51 名前:デフォルトの名無しさん [2010/03/24(水) 13:13:05 ] 全体の最後に Thread.list.each {|t| t.join} を置いておけばいいのかな。 メソッドを抜けたときに参照がなくなってGC対象になってしまう?
52 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 14:35:57 ] 環境(OS, Ruby, GUI, IOの種類)を書いた方がいいんじゃないかな >>51 生きていればThread.listが参照してる
53 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 14:37:14 ] 参照してるっていうのは正確じゃなさげ でもThreadクラスオブジェクトが知ってるということはどこかしらで参照してるんだろう
54 名前:41 mailto:sage [2010/03/24(水) 15:14:58 ] >>51 わからないよ >>52 OS:Gentoo Linux 2.6.32-r7 Ruby:1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux] GUI: KDE-Smoke 4.4.1(QtRuby) IO:ネットワークからデータを取ってきて保存する
55 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:06:29 ] >>54 >>50 と同じようなことだと思うけど、ワーカースレッド作って buttonPush で ワーカースレッドにキューを投げるようにすればいいんじゃないの? 雰囲気は、こんな感じ。(動くかどうかは未確認) def initialize @queue = Queue.new Thread.start do while q = @queue.pop storeBinary end end end def buttonPush @queue.push(:store) end
56 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 18:34:13 ] メッソドAがやっている事に、プラスαの操作をつけたい def MethodA 処理A 処理B end def methodB 処理A yield 処理B end yield以外はまったく同じ操作なんですが、やっぱり2つメソッドを作るしかないんですか?
57 名前:デフォルトの名無しさん [2010/03/24(水) 18:55:12 ] yield if block_given?
58 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 19:04:15 ] >>57 thx
59 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 21:33:34 ] >>54 スレッドが回っていないんじゃない?多分。 GUI起動したmainスレッド側で実行権つかみっぱなしな悪寒 GUI起動直前に、タイマーかなんかで定期的に Thread.passでスレッド回すコード追加してみたら いけるかもね
60 名前:54 mailto:sage [2010/03/24(水) 22:05:26 ] >>59 GUIでボタンをクリック→スレッドのスタート→Net::HTTPのライブラリーが呼び出される という順番でプログラムを書いているのですが Net::HTTP#get()が呼びだされた瞬間に、勝手にスレッドが終了してしまうようです(rubyのバグ?) シングルスレッドでテストしてみると、何にも問題がありません ひとまず、違う処理系でも実行してみたいと思います
61 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:09:56 ] なんらかの例外が起きてるんじゃないか? ruby に -d オプション付けてみた?
62 名前:デフォルトの名無しさん [2010/03/24(水) 22:23:40 ] 状況を再現できる短いコードが用意できればベストなのだが。
63 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:27:19 ] GUIやるかスレッドやるかどっちかにせえやという気は若干しなくもなく…
64 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:29:46 ] >>61 例外でスレッド終了か シングルスレッドだと動いてるみたいだしなさそうだが
65 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:31:13 ] >>63 GUI + スレッドは正しい道のりな気が
66 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:50:43 ] >>59 他の GUIツールキットの事情は知らないけど wxruby はもろにそれだな t = Wx::Timer.new(self, 9999) evt_timer(9999) { Thread.pass } Thread.new { hoge } t.start(100) こんな感じでタイマー使って定期的に Thread.pass してた
67 名前:54 mailto:sage [2010/03/24(水) 23:17:15 ] >>61 ttp://www.darshancomputing.com/qt4-qtruby-tutorial/chapter_01 これくらいでも、例外が発生していました LinuxでもWindowでも例外が発生します >>62 簡単なコードを書きました ボタンを押すと、コンソールに"test"と表示されます ずーっと"test"と表示されていて欲しい所ですが、2〜3回しか"test"と表示されません ttp://loda.jp/textliving/?id=28 windowsの人は「gem install -r qtruby4」でインストールしてください Linuxでは「kde-base/kdebindings-ruby(Gentooの場合)」というパッケージをインストールしました >>60 ここでは、バグかな〜と思ったのですが Active Script Rubyでも、同じ所でスレッドが終了してしまいました どうやら、処理系のバグってのは勘違いっぽそうです
68 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:40:13 ] >>67 ASR1.8.7でそのコードを試した感触だと>>66 がビンゴっぽい
69 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:42:24 ] jrubyはネイティブなrubyの処理系を必要としますか? NetBeansのRubyだけで、おk?
70 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:55:13 ] なにがなんだかさっぱりわからんが、JRuby は Java の実行環境上で動作する インストールに必要なのは Java の実行環境
71 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 00:59:12 ] 説明しよう! Java で動作してる NetBeans には JRuby が最初から同梱されて使える状態になっているのだ! だから cruby を別途インストールしなくても Ruby スクリプトそのものは作れるんだ! すごいね!
72 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:11:46 ] Rubyは雑務や仕事の効率化UPのためのちょこっとスクリプトに使う人がよくいるみたいですが シェルスクリプトとはできることが違うのでしょうか? シェルスクリプトにできなくてRubyなら出きることって何かありますか?
73 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:15:40 ] シェルスクリプトつかったことないならむりしてわだいにださなくていいよ
74 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:29:39 ] shell script だけではできる事は非常に限られている shell の種類にもよるが四則演算すらできないしカウンタも使えない ``を多用すればruby 以上の事はできるが面倒で煩雑 ruby の方が shell script より楽ってこと
75 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 03:17:53 ] InterfaceやAbstractがないことに驚いたんですけど! 動的言語では型付けがいらないからInterfaceを返してキャストとが要らないのは 分かったものの、ダックタイピングというのが分からない とりあえずInterfaceおいてダックであることを明示、保証するのが当たり前だと 思ってたけど、この必要がない理由と動的言語の性格って関連があるの?
76 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 03:40:37 ] 必要な時に必要なだけメソッド定義すれば
77 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 05:22:26 ] 動的言語に何の保証があるというのか
78 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 06:14:26 ] 静的型付け言語なら定義済みのクラスやインターフェースからコンパイル時に 型チェック(引数や型による代入制限、メソッドの有無等)を行えるが 変数が型を持たないrubyではそれらが意味をなさない ダックタイピングは乱暴に言っちゃうと メソッドが無かったり引数があわなければどっちにしろエラーになるんだから それでええやん、て感じ
79 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 08:25:53 ] 実際は別にダックタイピングを駆使してるわけでも意識してるわけでもない どう考えたって逆にめんどくさいからな 「○○するメソッド名ってやっぱ××だよな」程度の使われ方になる クラス作成者とクラス利用者の間における命名規則の紳士協定みたいなもんだ
80 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 10:59:42 ] あれ時間が戻った?
81 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:58:55 ] >>75 どっかの面接みたいな問だな
82 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 17:18:31 ] ・Rubyの変数には型がない(代入に制約がない) ・Rubyは動的型付けの言語(=型が実行時に定まる) 型が無いわけではない この辺が混同されやすいのかなあ
83 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 17:29:12 ] 「いわゆる型」がないんだよね 型って言われたら「その型って具体的に何を指してるんですか」とか聞かないと駄目かなあ
84 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 17:38:40 ] クラスと型ってどう違うの? なんとなく同じ様なもののイメージなんだけど
85 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 17:41:20 ] うだうだ言ってないで文法書とサンプル読みあさった方が手っ取り早い。 先にRuby的言葉遊びから入って得られるものは少ない。
86 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 17:43:55 ] オブジェクト指向の知識があるならそれでOKなんだよ 問題はオブジェクト指向と称して実はただの「C++の知識」「Javaの知識」だったりするから
87 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:48:07 ] Rubyの場合は話してる最中に 「いやこれはたぶんRuby依存の特有の話だな…」 とか気づけるからまだマシなような気もする Javaの実装がオブジェクト指向だと思い込んでる人は結構困る
88 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:52:33 ] 聞き手そっちのけのオナニー喩話はどうでもいいよ。 ちっとも理解が促進されないし。 既に解ってる連中同士の内輪ネタでしかない。
89 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:52:38 ] Rubyでオブジェクト指向の基礎を学ぶのは厳しい こんな感じなんだ〜程度なら十分だけど
90 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 18:59:41 ] 実際に実行可能な言語に落とした時点でオブジェクト指向でもなんでもないものになる オブジェクト指向は実行しないからこそ美しい 実行のための仕組みは邪魔
91 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 19:08:43 ] たのしいRuby 第3版がもう出てた。
92 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 19:19:12 ] >>78-79 なるほど 振舞いやパターンを明示することを積極的に排除する理由があるわけじゃなかったのか いわれてみれば静的な型に頼らないってことと振舞いをまったく規定しないってことには大きな開きがあったね >>76-77 instance_evalとか使いまくりがデフォなの?
93 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 19:55:17 ] これから学ぶweb関連のプログラミング言語としてはrubyでいいでつか?
94 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 20:03:11 ] > でつ
95 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 20:06:10 ] Javascriptと、PHPかJava辺りがいいんじゃないかな
96 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 20:41:58 ] かなーり微妙臭いふぃんきではある 主要なフリーウェアでスクリプト書くときなんか大概Python主流だし RubyもPythonも両方やるのが吉
97 名前:デフォルトの名無しさん [2010/03/25(木) 22:17:44 ] ひとつやっとけばOKという発想は捨てよう。
98 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 22:31:57 ] そういう意味ではライブラリが共通の.NETは楽だわな
99 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 22:35:11 ] >>89 真面目な質問だがOOPの基礎を学ぶのが簡単な言語はどれ? OOPなんてcode書かなきゃわかるようにならん codeを書きやすいか,書く気になるかどうかのトレードオフが大きいからね
100 名前:99 mailto:sage [2010/03/25(木) 22:50:23 ] >>99 > codeを書きやすいか,書く気になるかどうかのトレードオフが大きいからね →…どうかとのトレードオフ… すまん
101 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 23:13:35 ] LISPかな。 いや、冗談半分本気半分なんだけど、OOPとはなんぞやってのが あまりにも難しすぎる。 オブジェクトが自立性を持っていて、受け取ったメッセージを自分で判断して 振舞う(メッセージを拒絶することも含む)ような処理系でのプログラミングが OOPなんだぜ! という学派からすれば、Rubyはまさにそれではある。
102 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 23:14:57 ] OOの前にOOでない言語を身につけた方がいいな お薦めはCだ
103 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 23:28:43 ] 自分もCから入ったからCじゃないものから入る人の気持ちは分からない いきなりRubyを使うってどんな感じなんだろう
104 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 00:51:26 ] LispやCから入れと言ったら挫折する人が多いと思うな 俺はいきなりRubyでも良いと思うけどな まずプログラムをどんどん書かないと 遊びでも良いから何か実用性を見出せないと強制しないと続かないと思う 昔はBasicで入った人も多いし(俺はFortran→Cで入ったが)
105 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:01:25 ] プログラムをどんどん書くって結構難しい。 家では本を読むだけだから力がつかない。 やっぱ仕事でプレッシャーかからないとダメ。
106 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:04:14 ] 作りたいものがないならプログラミング言語なんて覚えなくていいし学び続けられるものじゃない 作りたいものが特にないのならRubyのことなんて忘れて他のことやれ もし本当にRubyのようなものが必要なのなら、たとえ今離れてもやっぱり戻ってくる
107 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:07:58 ] 遊ぶのなら、今日日はJavaとかActionScript(Flash)からとかじゃない? WEBアプリをSwingやFlexでとか、ぶっちゃけ楽しい。 サーバサイドはRailsでもPHPでもとにかく楽できるし、その辺全部無料で Windowでも完結できるし。 で、その辺から入ると、最後までCにたどり着かない可能性が高いと。
108 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:35:20 ] >>107 Java使ってるけど正直プログラミング初心者には難しいのでは Rubyの方がまだ簡単で何かできる感じがするが たとえばファイル名を整理するとかファイルの中身を整形しなおす とかデータ合わせるとか実用的でそんなに難しくない これをJava+Swingでやれといったら初めは大変だと思うんだが
109 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:39:36 ] > たとえばファイル名を整理するとかファイルの中身を整形しなおす > とかデータ合わせるとか実用的でそんなに難しくない いや、遊びでそんなことしないし 遊びと言えば、なんか表示して動かす。BASICから入った人なんかは 特にそうじゃね?他には音を鳴らすってパターンもあったけどもさ そう言う意味で、SwingやらFlashやらって言ってみた
110 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:42:11 ] Rubyは「おまじない」がないか、または最低限レベル(思想的にはBASICに近い) JavaやC++はあらゆるパラメータを自力で全部指定できるのがメリットだが、初心者にはただの負担だ
111 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 01:44:23 ] N88-BASICはおまじないの嵐だったがな もちろん、BASICマガジンに載ってたコードの事だが
112 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 02:01:19 ] >>106 とりあえず何か書いてから考察なり質問なりすべきw どうしたらコード書くか言語学習するかなんて100%自分の動機だけの問題じゃんね
113 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 02:29:46 ] cはゆるゆる過ぎて変な癖がつくと思う。 かといってrubyも変にperl互換な所で、変な癖がつくのは変わらないけど。 ゆるゆるから厳しい所はキツいので、最初から厳しく型宣言必要な言語のほうが、いいかもね。後から緩く成る分には楽で楽しく成るだけだし。 いろいろまんべんなく使ってみるのが無難かもね。
114 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 02:32:45 ] Rubyを使ってると、しょうもないことを偉そうに語りたがるようになるということはわかった。
115 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 02:54:35 ] しょうもないことってなに?
116 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 03:01:20 ] 片栗粉はゆるゆる過ぎて変なクセがつくと思う かといって羊羹も変にこんにゃく互換で変なクセがつくのは変わらないけど ゆるゆるから厳しいところはキツイので最初から厳しく型成形必要な射出のほうがいいかもね
117 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 03:04:45 ] 意味がわからんが、片栗粉はちゃんとレンジでチンしたのか?
118 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 09:18:26 ] 初めから厳しい言語使えとかまんべんなく使えなんてまず挫折すると思うが コンパイル一つだって失敗するかも知れないのに いきなり高い目標設定せずにとにかく自分が入りやすい言語を使う方が良いと思う
119 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 09:52:34 ] おっさんしゃべり場
120 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:07:01 ] ruby/tkってデフォルトでrubyに入ってるの? tkだとスレッドに問題が発生することないのか 教えてエロい人!!
121 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:14:00 ] スクリプトを実行する人のマシンにRubyがインストールされていて、 RubyのC言語ファイルの最初のコンパイル時にtkが有効にされていて、 なおかつ同じパソコンにTcl/Tkまたはtklib相当のものが別途インストールされていれば動作する
122 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:21:33 ] …まあ、自分用だよな 他人にウィンドウを提供するために使うようなもんでもない
123 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 11:26:24 ] 横からだけど、じゃあ他人用にするなら何がいいと言うんだ 選択肢が多すぎて逆にどれを選んでいいかわからん
124 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:04:48 ] rubyだめじゃん rails以外は何にも作れないじゃん
125 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:15:21 ] >>123 Rubyは使わない
126 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:17:40 ] ○○するのにはRubyは便利 ××するのにはRubyは不便 ○○に入るのが自分用スクリプトの作成 ××に入るのがウィンドウでGUI
127 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:19:08 ] なんでこんな中途半端なポジションになってしまったんだろう・・・
128 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:25:22 ] >>124 早く気付けて良かったですね
129 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:29:07 ] >>127 どこが中途半端なのかわからない
130 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:31:44 ] >>129 ウィンドウを作るということに意味があると考えているのだろ
131 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:34:13 ] 少なくともGUI対応はPerlとそう変わらないレベルだと思うんだが何がそんなに劣ってるのだろう
132 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:36:37 ] rubyはGUIはどうでもいいと思ってるようです
133 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:38:33 ] ・中途半端そうなライブラリがフラットにたくさん並んでいる ・ググっても網羅的な情報がない ・スレでGUI系の質問を見かけるたびに陰気臭い人にネチョネチョとからまれている
134 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:38:36 ] >>131 言語の問題というよりは 使ってる人達の問題じゃないかな GUIを便利にしようとするモチベーションがないし そういう芽を自ら摘んでしまう独特の文化がある
135 名前:デフォルトの名無しさん [2010/03/26(金) 12:39:53 ] ウィンドウを作ることに意味はないとでも言うのか
136 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:41:03 ] そう言っている人が Ruby 界隈には多いってことだろ
137 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:44:43 ] >>135 必ずしも意味があるとは限らない 標準入力から標準出力への流れがプログラムだ この両方が保証さえされていれば、ウィンドウは必須ではない >>133 WindowsのAPIべったりだったり特定のGUIバインディング限定の話をだらだらされるからだよ Railsの話をこのスレでしないのと同程度には、GUIの話はここでは向かない Ruby on Railsは全く別物でRuby本体の機能あんま関係ないよな と RubyのGUIシステムは全く別物でRuby本体の機能あんま関係ないよな はほぼ同じ GUIのスレはこことかもあるぞ ttp://pc12.2ch.net/test/read.cgi/tech/1155031689/
138 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:46:05 ] >>137 さっそくからんでるしw
139 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:48:23 ] >>137 それて、windows限定でしょ 意味不明なスレに飛ばそうとするなよ
140 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:50:14 ] GUIの話の95%くらいはWindows限定の話だからWindows用スレで適当な気もする
141 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:53:58 ] LinuxでウィンドウアプリケーションをRuby経由のツールキットを利用して作ってて なおかつRubyの知識が初心者スレレベルという人を見つけるくらいなら宝くじに当たったほうが簡単 Linuxのツールキットが使えるような人はRubyも使い慣れてて本スレで聞きそうだと思う
142 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:56:36 ] GUIが便利なのは、直感的な操作が求められる場合と 問題が本質的にグラフィカルな場合(画像編集とか) 現状じゃRubyって感じではないような…… あれば便利なのは間違いないけど JRubyからSwingを使うアプローチとかは面白そうではある
143 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:56:51 ] > Linuxのツールキットが使えるような人はRubyも使い慣れてて本スレで聞きそうだと思う という認識でFA Rubyユーザーにとって、GUIはRubyを使い慣れたあとにGUIを司るライブラリ単体で学習して使うもの Ruby/Tkなら、Tkの使い方を勉強する Tkの勉強だから、Rubyスレは関係ない Ruby/GTKなら、GTKの使い方が必要で、やっぱりRubyスレは無関係 GUIライブラリを呼ぶような部分は、慣れたRubyユーザーなら特に質問が出るような障害にはならないと
144 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 12:59:32 ] こういう長文でスレが埋ま理始めると末期だな。
145 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:00:58 ] >>144 お前2ch使うの今月が初めてか
146 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:03:01 ] 自分のやり方は間違ってない主張の初心者 vs お前のやり方は間違ってるの主張の古参 という図式は毎年長期休みにたいていのスレで見られるもんだと思われ たいていの場合、前者が誤りで、後者が大人気ない
147 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:04:37 ] 今年はテンプレが増えるのかどうか生暖かく見守ってます
148 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:06:03 ] >>141 それ、俺だよ
149 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:07:40 ] 一人やけに沸点低い古参がいて毎回トラブルの元になってるんだよな 初心者スレまで来て何やってんだか
150 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:10:36 ] 初心者スレなので 「RubyでGUIなんて現状誰もやらないし、やっても中級者が趣味として嗜むレベルなんだよ」 というようなことは粘り強く啓蒙していくべきかと 勘違いしてしまう被害者は少なければ少ないほどいい Ruby初心者にもGUI言語初心者にもわかりやすいGUIバインディングや解説を作るんだという志は大層立派だが、 でもこのスレとは無関係なので完成したら改めて教えてくれ
151 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:29:15 ] 無知のくせに絡んでくるんだよなGUI否定の人は
152 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:31:35 ] そんなに頻繁に出てきてそのたびに荒れるんならGUI専用スレ作ればいいのに
153 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:32:19 ] 現代的スクリプト言語のうち 一般的なスクリプト用途とGUI用途とOS跨いだ移植に向いててそこそこ解説のある言語はPythonだけだな 「たったひとつの言語」をスクリプト言語に求めるならPythonやれ 本当はC++がいいんだが残念ながらスクリプト言語ではない
154 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:32:20 ] >>151 同感
155 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:33:04 ] CUI専用スレでも作ればw
156 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:35:08 ] 完成したら、というが そんなに素晴らしいなら、作ってみてから また来てくれ。 1. よし言語バインディングを調べて 2. 各ライブラリのラッパを書いて(これ膨大すぎるだろ) 3. ど、ドキュメントを書くぞ 大抵は1.の段階でほかの方向なり模索すると 思うんだな…(2までやるのでもかなり凄い。下手したら俺言語作るよりよほど難易度高いという…
157 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:37:59 ] >>153 それ言ってしまうとジャスト1時間前の>>126-127 に戻ってまたループに なんかGUI否定の否定派がいる雰囲気 RubyはGUIに向かない、という事実を述べることのどこがそんなに気に食わないんだ…
158 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:39:45 ] GUIプログラミングがしたかったら Windows使えってことか。
159 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:39:45 ] 質問掲示板なんかでよくあるパターンだな 質問に答えることもなく、〜〜すべきでないと言いくるめようとする
160 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:40:48 ] 何がどうGUIに向いてないんだよ 普通に使ってるわボケ
161 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:41:11 ] >>157 Rubyしか使えない人でなおかつGUIだけをやってる人がいるんだと思う 両方一気に否定されて立つ瀬がない
162 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:42:26 ] 教祖がウィンドウズ使ってないもの。 ウィンドウズの話は異端。地獄に堕ちるよw
163 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:43:31 ] 「向かない」と「できない」には天と地の差が… >>160 それがスレ相当のRuby初心者にもできるのなら是非
164 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:43:44 ] オブジェクト指向でGUIに向いてないってどんな言語だよ
165 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:45:40 ] Ruby部分とツールキット部分を分けて考えられるかどうかが境界な気がする
166 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:47:04 ] >>165 正直、puts したらアラートウィンドウがポップアップするくらいになってるべきだと思う
167 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:50:12 ] いやそんな将来がどうとか妄想がどうとかどうでもいいから 現在どうなっていて、初心者はどうすべきかだけ教えてくれ
168 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:54:26 ] >>167 自分で調べられない人が使えるほど楽ではないから、諦めた方がいいと思う。 英語にアレルギーがなくて、自分で調べられる人なら、問題無いように思う。
169 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:56:05 ] 結構いろいろGUIライブラリのRubyバインディングはある GUIライブラリ本体やRubyライブラリのインストールにつまづく初心者は潔く諦めて他の方法を探す 使い始めて分からないことはGUIライブラリ本体の勉強をすれば分かるだろう Rubyに関係ない質問が無ければここもそんなに変な空気にならんだろう
170 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 13:59:42 ] >>167 Ruby/○○ の ○○ の使い方を自分で勉強できるなら問題はない(TkとかQtとか、Win32APIとか) これはRubyとは無関係で、世間様一般では○○単体で使われていて、専用の参考書や解説がある ただ、GUI提供ライブラリの利用初心者には普通に難しいとは思う この部分は「Rubyは初心者にもけっこう簡単」という(実は間違った)煽り文句の適用範囲外
171 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:05:34 ] で、これらを物凄く乱暴にまとめた言葉が「RubyはGUIに向かない」「初心者はGUIやめとけ」
172 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:07:46 ] RubyでGUIを扱ってみて質問しに来る人と比べたら、GUI否定のおっさんは初心者にも及ばないカスみたいなもんだな
173 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:12:55 ] >>172 はRubyでGUIパーツ扱ったことないな
174 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:14:42 ] GTKとか、ドキュメント少なすぎ。 やっぱりウィンドウズでやるしかないのか。
175 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:18:34 ] Ruby/Tkが学習コストとできることの兼ね合い上おそらくベストと思われるが、 Ruby初心者かつTkの知識がない人にこれが理解できるとはとーてー思えん。 せめてどっちかに習熟しててくれないと発散しすぎて無駄に大変だと思う。 変に分離性が高いので、 「ここからRuby」「ここからTkを呼ぶRuby」「GUI連携はTk独自でRuby無関係」 という… Rubyに慣れてると学びやすいという説に一票、あと>>173 。
176 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:22:54 ] Ruby/Tkは「いいよもうこれ全部Tcl/Tkで書いたほうがいいよ畜生」と自棄になってTclに戻らせようとする巧妙な罠
177 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:25:45 ] Windowsでいちばん簡単なのは「HSPでGUI作ってシェル経由でRubyスクリプトを呼ぶ」だと思う昨今
178 名前:120 mailto:sage [2010/03/26(金) 14:29:32 ] ところで、お前らの結論を教えて欲しいんだけど 結局、お前らは何だかんだ言ってGUIをやったことが無いんだな
179 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 14:31:52 ] なんだまだいたの
180 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 15:20:58 ] エグザイルみたいなもんか
181 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 15:35:15 ] >>153 同感 Ruby で無理して GUI やっちゃうと 環境依存になって結局後々苦労するのが見えてる Python でやっとけばびっくりするほど簡単にどこでも動く
182 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 15:39:34 ] 複数の言語を使うことを厭うのは損だよね
183 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 17:38:13 ] てすと
184 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:09:39 ] ruby で角括弧[]が browserForm = Form.new() [browserForm].each do |f| f.Text = 'hoge' end の様に使われているコードがあるのですが、この場合は どういう意味なのでしょうか?
185 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:11:57 ] array = [browserForm] array.each 〜 を省略して、生成と同時にメソッドコールしてるだけ
186 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 18:16:55 ] いちおう追記 質問のために書いたコードや操作対象が複数のときに一括処理する場合に備えているならともかく このコード自体はこれでいい browserForm = Form.new() browserForm.Text = 'hoge'
187 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 19:10:37 ] >>185 ありがとうございます。 おっしゃる通り一括処理で使われています。 ruby の理解が浅いため何となく分かった程度ですが、 brouseForm = Form.new() brouseForm.hoge = 〜 といういくつかの処理を f.hoge という形で見やすくしている と考えれば良いのでしょうか。
188 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 19:19:36 ] 見やすくっていうのも間違いではないけど ループや関数(メソッド)化して同じ記述を避ける(DRY原則)のほうかな puts "a" puts "b" puts "c" ["a", "b", "c"].each {|str| puts str } 3要素1項目ぐらいだから大差ないように見えるけど これが10要素5項目ぐらいになったらバカバカしいことになる つーかローマ字やめれw
189 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 19:20:37 ] ローワーキャメルケースとキャピタライズメソッドのコンボの恐怖 どっちもRubyの主流から外れてるので書くときの参考にはしないように 配列に関してはオブジェクトが「入ってる」という理解でいい (余裕があるならラベル入りの箱と考えるといいんだが) 箱からいっこ取り出すよ機能のeachで入ってるオブジェクト取り出して、 そのオブジェクトのメソッドを利用してる
190 名前:デフォルトの名無しさん [2010/03/26(金) 19:31:18 ] 確かに [very_long_variable_name].each do |v| … end で他の言語でいうletみたいなことはできるけど、普通は使わんなw
191 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 20:56:33 ] あれ、GUI論争ってもう終わったの? (コンパイルする方法がわからなくて途方に暮れながら)
192 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 21:02:29 ] Tkのスレッド対応みたいに突っ込んだ話になるとレスがつかないのに GUI論争するのっておかしい気がするな
193 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 21:03:35 ] そもそもここで「論争」なるものをしないで欲しいので
194 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 21:10:00 ] >>192 だってRubyのGUIでスレッドの話するのめんどくさいもん ネイティブのTkのスレッドとユーザーレベルのRubyのスレッドの両方の話せんといかん
195 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 21:13:35 ] rake教えてください 前処理が必要ないソース群と必要なソース群があるときruleはどう書けばいいんでしょうか? 下の例で、Bxのために前処理のルールをrule '.src' => '.pre'と書くと前処理が不要なAxまで前処理しようとします。 XはA1.out...An.out,B1.out...Bn.outに依存し、makeX A1.out A2.out...Bn.out -o Xで作成 A1.out...An.outはA1.src...An.srcに依存し、それぞれ makeOut Ax.src -o Ax.outで作成 B1.out...Bn.outはB1.src...Bn.srcに依存し、おなじく makeOut Bx.src -o Bx.outで作成 B1.src...Bn.srcはBn.pre...Bn.preに依存し、 makeSrc Bx.pre -o Bx.srcで作成 Ax,Bxはファイルが複数あることを示すため書いているだけで、ファイル名が連番ということではありません
196 名前:デフォルトの名無しさん [2010/03/26(金) 21:32:13 ] rule '.out' => '.src' rule /B.*¥.src/ => proc {|t| t.sub('src', 'pre') }
197 名前:デフォルトの名無しさん [2010/03/26(金) 21:44:15 ] 全部がBで始まるというのもないのか。 Regexp.union(FileList['*.pre'].pathmap('%n.src')) などと工夫してみて。
198 名前:デフォルトの名無しさん [2010/03/26(金) 22:06:43 ] 正規表現使ってまで rule に固執せずに FileList['*.pre'].each do |pre| file pre.pathmap('%n.src') => pre end のほうがベタだけどすっきり。
199 名前:デフォルトの名無しさん mailto:sage [2010/03/26(金) 23:57:10 ] >>192 春だからな、仕方がないんだよ ここの人はプログラミングした事無いのに、 そこら辺の宗教戦争が好きだから
200 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:19:01 ] まだ>>120 が粘着してるのか
201 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:19:02 ] 知らないことを答えようとするとGUI否定の人みたいなのしか出てこないことになる 知らないことは見てるだけでいい
202 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:37:34 ] Ruby/Tkの中の人があれだけがんばってるのに GUI否定とかやられるとがっかりするよな GUIスレが立ったみたいだからそっちが機能してくれればいいけど難しいか
203 名前:195 mailto:sage [2010/03/27(土) 00:42:18 ] thx 単純には書けないんですね
204 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:44:34 ] >>202 どう言葉で表現してもそもそも初心者向けではないはずなのだが、どうもそこに引っかかってる人がいる模様 初心者にもできるべきだと考える理由って何だろうね
205 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:47:08 ] >>204 彼らはGUI肯定をしているわけではないのです ほんのちょっぴり、初心者であったときのことを忘れてしまっているだけなのです ここは初心者スレなのに、自分ができるからって相手もできると思ってしまってる
206 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 00:55:29 ] 初心者にも優しいとか散々宣伝してきたツケが回ってきてるだけだろ 自業自得だ
207 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:08:29 ] ルビーのアンチは嘗ての初心者
208 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:15:40 ] Ruby専用GUI pc12.2ch.net/test/read.cgi/tech/1269609576/
209 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:52:19 ] RubyにGUIは向いてないとか言って馬鹿にされたから、今度は初心者がどうのこうのって もうアホすぎて死んで欲しいわ
210 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 01:52:54 ] Linuxだからruby-gnome2で満足してるけど、 ruby-gnome2と呼べばいいのかruby-gtk2と呼べばいいのか悩むことはある
211 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 02:06:10 ] >>205 Rubyコミュニティそのままだな
212 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 04:00:11 ] 教祖がウィンドウズ使ってないからね。 信者もウィンドウズ使わずに過ごせばいいとしか思ってない。 ルビー使いたければ、教祖と同じデビアン使えば患部も目指せるかもよ。 pc11.2ch.net/test/read.cgi/linux/1267107714/ Debian GNU/Linux スレッド Ver. 63 pc11.2ch.net/test/read.cgi/linux/1154631461/ Debian原理主義者テラモエス pc11.2ch.net/test/read.cgi/linux/1162356771/ Debian原理主義者ペタキモス pc11.2ch.net/test/read.cgi/linux/1178083456/ 【ubuntu】Debianは終わった?【knoppix】 pc11.2ch.net/test/read.cgi/linux/1237256190/ Debian-Liveに決めました
213 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 08:53:31 ] Apollo ってなに?
214 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 08:55:02 ] 過去の過ち
215 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:07:11 ] 黒歴史になってんの?
216 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:13:04 ] ビッグ・ボンバーズみたいなもんだ 5年遅かったスペシャルマンと5年早かったカナディアンマンのコンビ
217 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 09:24:16 ] あれはRubyもいいけどDelphiもね!というキャンペーンの一環だった気がする Delphiは言語自体はよかったんだけどねえ 過去形で話さなければならないのがつらい所 黒歴史ではない ただの過去の遺物 Delphiのコンポーネントの知識があるなら選択肢になるかと思う
218 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 11:11:47 ] >>208 いきなりクソスレ ワロタ
219 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 14:47:11 ] class C def a … end def b a.scan(re) end def re /…/ end end というのを rspec とかでテストしたいです a メソッド(と re メソッド)に依存してる b メソッドのテストはどうすればいいですか? a がいくつかの値をとる場合の b のテストを書きたいです b のテストで必要になるような値を a に返させるような初期値を与えるべきですか? それとも全メソッド引数で渡すようにするべきですか?
220 名前:デフォルトの名無しさん [2010/03/27(土) 15:04:59 ] c = C.new c.stub!(:a).and_return('ほげふが') c.stub!(:re).and_return(/ふが/) c.b.should ...
221 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 17:58:47 ] >>205 オタクの悪いところだよなぁ 俺はわかるから、分からないお前らがだめなんだよ みたいな クソ根性論だよ
222 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 18:02:32 ] >>221 誰もそんなこと言ってない気がするんだが。
223 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:45:29 ] ちょっと聞きたいんだけど、 >>[1, 2, 3].each do |i| >> puts i >>end >>[1,2, 3].each { |i| puts i } この二つを実行すると同じ結果が出てくるけど 書き方が違うだけ(『do〜end』が『{〜}』になった)って事でいいのかい?
224 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:50:36 ] >>223 そこに疑問持つくらいならまとまった解説をきちんと読んどいたほうがいいぞ ちなみに回答はYES do … end は { … } のブロックに置き換えることができる 全く似ていないものに begin … end があるがこれは置き換えができない { … } は Hash リテラルを記述するのにも使用されるがこれを end つき構文に置き換えることもできない
225 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 19:55:35 ] >>224 うn、ありがとう&ごめん 本とか買わずにリファレンスだけ読んでて、唐突に.each doとか出てきて 『each』と『each do』って二つあんのか!ってびっくりしてしまってな
226 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:01:57 ] do で始まって end で終わるものだけだな end で終わるならなんでもカーリーブレースで置き換えられると思ってしまう人が結構いるので注意 どちらかというと do の存在のほうに注目してほしいんだが、なぜか end にばかり目が行く模様
227 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:21:11 ] Runnable.new { public void run(){ //適当な内容 }} javaではこのようにクラスをオーバーライドすることができますが、 Rubyでこのような事をやるにはどうすればいいんですか?
228 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:33:09 ] Rubyではクラスのオーバーライドはないと思う ただの定数にクラス定義(とメソッド定義)が入ってるだけだから、 継承するだけで別のクラスオブジェクトになれるはず 元クラスの動作を変更せずに安全にメソッド追加したいだけなら クラスを継承してからクラス定義を再オープンしてdef追加するかオブジェクトにextendでいいんじゃね
229 名前:227 mailto:sage [2010/03/27(土) 20:42:46 ] >>228 1つのメソッドをオーバーライドできればいいんです しかも、そのクラスは1回しかインスタンス化しません なのでわざわざ、面倒なことはしたくないんです
230 名前:デフォルトの名無しさん [2010/03/27(土) 20:46:35 ] 特異メソッドを使うといいと思う obj = Runnable.new def obj.run puts "foo" end
231 名前:227 mailto:sage [2010/03/27(土) 20:54:42 ] >>230 特異メソッドにそんな使い方があったとは 単純にクラスに属すメソッドの定義だと思っていました ありがとうございます
232 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 20:56:33 ] >>230 うひょうこの定義のしかた超きめえ今度から使おう 素直に extend する人用 module RunExtender def run; @run; end end r = Runnable.new r.extend(RunExtender) r.run
233 名前:デフォルトの名無しさん [2010/03/27(土) 21:00:57 ] >>231 発想の順番からいうと、特定のインスタンスだけで使えるように 定義するのが特異メソッド。 で、RubyのクラスってのはClassクラスのインスタンスだから、 その特異メソッドはいわゆるクラスメソッドの位置づけに相当するということ。
234 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 21:05:09 ] ていうか>>219 のもこれで用済まないかね
235 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:33:45 ] 普通のメソッドから特異メソッドにアクセスできないみたいですが、 どうにかなりませんか?
236 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:43:16 ] >>235 >>231 と仮定すると、どうにもならない そもそも所属が違うから、特異メソッドの存在を知らないインスタンスメソッドは特異メソッドにアクセスできない そうでないのなら、特異メソッドは new されたオブジェクトではなく new するのに使った Class オブジェクトの持ち物なので self.class.hoge で使え
237 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:44:57 ] >>236 thx
238 名前:デフォルトの名無しさん [2010/03/27(土) 22:45:24 ] できるよ。 irb> class Object; def hello; hello2; end; end irb> o = Object.new irb> def o.hello2; puts "hello"; end irb> o.hello hello
239 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 22:52:12 ] 配列にはattr_writerでアクセッサを指定することはできないんでしょうか?
240 名前:デフォルトの名無しさん [2010/03/27(土) 22:53:26 ] >>239 どういうメソッドが欲しいの?
241 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 23:02:07 ] メソッドがほしいというより使い方が知りたいのです attr_writerを指定すると読み書き両方ともできなくなったので 根本的に配列にattr_readerやwriterを使うのは間違いなのですか?
242 名前:デフォルトの名無しさん [2010/03/27(土) 23:05:09 ] えーと、 class Array attr_reader ??? # ここに何書いたの? end
243 名前:デフォルトの名無しさん [2010/03/27(土) 23:07:14 ] たとえば、配列にhogeという書き込み専用属性を作りたければ、 class Array attr_writer :hoge end a = [] a.hoge = 10 a.instance_variables #=> [:@hoge] のようにできるけど。
244 名前:239 mailto:sage [2010/03/27(土) 23:08:53 ] こういう風にしました readerArray = Array.new(3, 0) attr_reader :readerArray
245 名前:239 mailto:sage [2010/03/27(土) 23:17:04 ] 質問のしかたが悪くてすみません・・・ こういう感じだとクラス内の配列は読み取りや書き込み専用にはならないのでしょうか class Foo def initialize @readerArray = Array.new(3, 0) @writerArray = Array.new(3, 0) end attr_reader :readerArray #ダメ attr_writer :writerArray end
246 名前:デフォルトの名無しさん [2010/03/27(土) 23:32:41 ] >>245 オブジェクトを作ってみる。 > f = Foo.new #=> #<Foo:0x000001010e23b8 @readerArray=[0, 0, 0], @writerArray=[0, 0, 0]> @writerArray 書き込みアクセサで書き換える。 > f.writerArray= [1,2,3] #=> [1, 2, 3] 読み出しアクセサはない。 > f.writerArray #=> NoMethodError: undefined method `writerArray' for #<Foo:0x000001010e23b8> リフレクションで取得は可能。 > f.instance_variable_get(:@writerArray) #=> [1, 2, 3] @readerArray 書き込みアクセサはない。 > f.readerArray = [10, 20, 30] #=> NoMethodError: undefined method `readerArray=' for #<Foo:0x000001010e23b8> リフレクションで書き換えることは可能。 > f.instance_variable_set(:@readerArray, [4,5,6]) #=> [4, 5, 6] 読み出しアクセサで取得。 > f.readerArray #=> [4, 5, 6] attr_reader しかしていないと言っても、それで得られたオブジェクトが読み取り専用になっているわけではないので、 > f.readerArray.pop #=> 6 > f.readerArray #=> [4, 5] のようなことは起こる。
247 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:03:47 ] Rubyにアクセサという機構はない attr_* は同名のインスタンス変数を返す(か代入する)メソッドを自動で作成するだけ def arr @arr end def arr=(a) @arr = a end メソッド定義を自力で書くのを避けたいときに使うだけで、特別な動作はしない def を書く代わりにできるだけ
248 名前:239 mailto:sage [2010/03/28(日) 00:11:30 ] >>246 なるほど アクセッサで指定した配列オブジェクトそのものは読み、書き専用になるけれども、 その中身のwriterArray[0]とかはwriterArrayのオブジェクトから読み込みができないので 各要素オブジェクトにもアクセスできなくなるので、writeArray[0] = 1 はできなくなり readerArrayの場合は、readerArrayの読み込みはできるのでreaderArray[0]にアクセスできるけれども readerArray[0]の要素オブジェクト自体は読み取り専用じゃないので readerArray[0] = 1 ができてしまうんですね 大変参考になりました >>247 やっぱり横着してはならないのですね 夜遅くまでありがとうございました
249 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:15:03 ] ぶっちゃけ、attr_ はもう名称変えたほうがいい こんだけ広まったらもう混乱の元にしかならん
250 名前:デフォルトの名無しさん [2010/03/28(日) 00:15:55 ] rubyでmail送信したいんだけどXPHomeeditionではできない? できれば携帯におくりたいんだけどできるかな? ただしSMTPサーバがない状態で。 VB.NET & XP Professionalなら簡単にできたんだど。 だれかそのあたり詳しい人いますか? 条件は XP Home Edition 携帯にmail送信。(異常時に) SMTPサーバなし(外部サーバ通じてではできるらしい。VB.NET & Professional なら不要)
251 名前:デフォルトの名無しさん [2010/03/28(日) 00:15:58 ] f.writeArray[0] は f に writeArray というメソッドがあってそこから 返ってくる配列に添え字アクセスする意味。 attr_writer :writeArray では writeArray= というメソッドしか 作られないからダメってことですな。
252 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:20:48 ] どうでもいいけどLCCで書くのやめて欲しいなあ Rubyではスネークケースで書いて欲しい そういやスネークケースって言葉ぜんぜん流行らないよね write_array みたいな全小文字でアンダースコア区切りの書き方ね
253 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:24:46 ] >>250 require 'net/smtp' 使い方はマニュアル読め
254 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:25:48 ] >>252 禿げ同。 初心者がスネークケースで質問するスレ立ててよw
255 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:29:24 ] >>252 Rubyではあらゆる点でアンダースコア区切りが主流だと思って ライブラリのトップファイル名をアンダースコア区切りにしたら叩かれたでござる require 'hoge_lib' ではなく require 'hoge-lib' となるように作ろうね require しないファイルはアンダースコア区切り
256 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:30:49 ] 個人的にはピリオド区切りが好き
257 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:59:00 ] 私初心者だけど クラス命はFooBar メソッド命もFooBar 変数名はfoo_barって感じで書いてた こういうの嫌われるの?
258 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:00:21 ] >>257 間違えた クラス名 => FooBar メソッド名 => fooBar 変数名 => foo_barでした
259 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:03:37 ] >>255 マジか。アンダースコアで作っちゃった。 でも、active_recordとかもアンダースコアだし、いいよね? ちなみに、その指針みたいなのどっかに書いてある?
260 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:16:19 ] >>258 Rubyではメソッドを呼ぶ行為とローカル変数を呼ぶ行為は字面で区別しない LCCを使用するのは特定の外部ライブラリのラッパーとかの特殊用途向け メソッド名と変数名は全部小文字でアンダースコア区切りが普通 ちなみに大文字メソッド名でも定義はできるし動作もする(ただしレシーバ必須で self.Hoge 等と呼ぶ) 余談だが日本語でもできる(文字エンコーディングに注意) >>259 そもそも active_support なのか active-support なのか activesupport なのかわかりにくいから 新しいメソッドはもうまとめようぜという話になったと記憶
261 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:21:58 ] こんなとこでどうでもいい宗教論争吹っかけんなよ糞うざいから
262 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:25:50 ] >>261 別に従わなくてもいい 全部のメソッド名を日本語にしても構わない DSLで自分のルールを作るのさえ自由だ end を } にするように書き換えてコンパイルすることを別に止めはしない ただ、それは孤児になる
263 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 02:00:57 ] Java が 1.1 系列になるときに、クラス定義の規則や、命名規則を厳格にすることで、 JavaBeans が成立し、開発環境でそれらを扱えるようになった。 マウスのD&Dで、イベント定義をしたり。 引数なしのコンストラクターを定義して、 setter/getter とか boolean は isProperty() にするとかそんなの。 命名にも、そういう実益があればいいんだけど、単にスタイルの問題だと従う意味が分からない。
264 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 02:13:14 ] 教祖が適当に決めてるのが現状だしな。 perl互換にしたがる傾向が強いが。
265 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 02:24:29 ] >>263 Rubyは本当に本当に自由に書くことができるので、逆に記法が散逸してしまったのだな スタイルというよりはデファクトの決定 読めない上に入力方法もわからない外国語UTF-8クラス名の外国語UTF-8メソッドを使いますとか言われても困る rubygems は gem install のインストールディレクトリ名と require のファイル名を別個にすることができるので たいそう混乱した これは Hoe や Jeweler のサポートで軽減されてきている 別に従わなくてもいい 特に外部に公開しない場合は 公開するような場合でも、別に守らなくても構わない ただし、それに伴って何か不利益を被ったとしてもそりゃ自己責任で 俺と違うやり方の世界のほうが悪いんだと叫んでくれ
266 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 08:12:01 ] jrubyのライブラリはネイティブな実装ですか?
267 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:54:00 ] 「RubyはGUIに向かない、Pythonにしとけ」ってのは、どういうこと? Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。
268 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:04:22 ] というかRubyのGUIは全部間借りなのよ Ruby/TKはTcl/Tkというものを使ってて、Tkの勉強が必要 Ruby/GTKはGTKの、Ruby/QtはQt(Qt4)そのものの勉強をする必要がある Rubyの文法とか考えとかそういうものとは全く別のものを勉強しなければならない 「GUIはRails並に別」と言われる所以 「わざわざRubyから呼んで苦労背負い込むくらいなら 直接そのプログラミング言語を学んで直接起動させたほうがマシじゃね」という
269 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:07:09 ] > Pythonには、LinuxでもMacでもWindowsでも動くことができるGUIライブラリが標準で用意されてるんでしょうか。 これに全く答えてないわけだが。 Pythonには間借りでないGUIライブラリがあるわけ?
270 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:15:22 ] この際だから はっきり言ってしまうと Pythonの場合 wxPythonならwxWidgetsは覚える必要はないし PyQtならQtを覚える必要がない TkinterだけはTcl/Tkを知らないと使えないとは思うけど
271 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:35:23 ] Tclの難しいところ(変数/コマンド置換、制御構文のブレース等)はRubyがやってくれるから Tcl知ってる人がTk使えるようになるのと Ruby知ってる人がRuby/Tk使えるようになるのに必要な勉強の量は大差ないだろう 問題はLinuxでRuby/Tkが使えるようになるまでだけど RubyでGUIやりたいって言ってる人はたいていWindowsユーザなんじゃないか だとすればActiveScriptRuby入れてActiveTcl入れるだけでRuby/Tkが使えるようになるから PythonでTkinter使うのとたいしてかわらない とういわけでRubyでGUIスレの発展を切に願います
272 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:39:34 ] Ruby/Tkが学習距離的にいちばんマシではある 「とりあえずウィンドウとかボタンとか入力欄とか出せればなんとかなんじゃね」 というコンセプトがRuby寄りだ 「Tcl/Tkでいちばん難しいのはTcl」という本末転倒な症状もRubyなら軽減 が、Rubyを一通り学んでからGUIに手を出すという順番自体は重ねて推奨
273 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:48:22 ] >>270 それは>>269 の答えになってるの?それともただの独り言?
274 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:50:05 ] >>273 半分くらい答えになってるんじゃね?真偽は置いておいて。 というか何故そんなに喧嘩腰なんだ
275 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:54:18 ] wxPythonなんかも結局wxWidgetsのマニュアル見ることになるから あんまりRuby/Tkなんかと変わらないよ その辺はどこのGUIインタフェースも一緒
276 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:56:24 ] 深い使い方しないという範囲限定の話だと思う
277 名前:267 mailto:sage [2010/03/28(日) 11:02:09 ] >>268 プログラム言語によらず、GUIライブラリなんてそんなもんだと思っていたので、 RubyじゃなくてPythonだと何が嬉しいのかを知りたかったのです。 >>270 > wxPythonならwxWidgetsは覚える必要はないし > PyQtならQtを覚える必要がない GUIライブラリ固有の知識がなくてもPythonの知識だけでGUIが作れるということでしょうか。 これはにわかには信じられないのですが、ちょっとPython勉強して出直してきます。
278 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:08:16 ] ttp://www.ibm.com/developerworks/jp/linux/library/l-qt/ > Ruby/Qt の使い方は、PyQtにかなり似ています。どちらの言語も同じような動的特性 (dynamism) と > 簡潔性を備えていますので、個々の要素に名前の違いはあるにしろ、似た感じのコードになっていても > 不思議はありません。 RubyもPythonも似たようなもんなんじゃね?
279 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:08:42 ] でも俺はある程度Tcl/Tk知ってるからPerlでもRubyでもPythonでもTcl/Tk単体でも 学習コスト最低レベルでウィンドウを扱える まあ要は用途次第だな GUIを提供することだけが最重要で、その裏にあるプログラムの動作はどうでもいいとか
280 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:14:18 ] そもそものあれとしてGUIが必要な人はRubyを使わないし、 Ruby使ってる人はRubyからGUIライブラリを呼ぼうなんて考えない GUIが必要なときは素直に他の言語で書く
281 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:23 ] >>280 んなこたーない。 …とは思うものの、自分も Ruby で書かれた GUI アプリは Rabbit くらいしかしらない。
282 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:35 ] >>280 で、つまりRuby上のGUIは初心者の領域ではないという話になるわけか 別スレ立ったんだしとりあえずそっちでいいじゃん
283 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:18:38 ] >>280 それはそうだろうけど、その「他の言語」ってところでPythonを勧められることがままあると。 んで、PythonとRubyではそんなに違いないんじゃないの?ってのが>>267 の疑問では。 C#やらJavaやら勧められるんなら、そういう疑問は出てこないと思う。
284 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:20:22 ] >>281 goRua…は終わったか ホントにGUI部分の処理が面倒だなあ ウィンドウ処理と滅茶苦茶高次に融合したRubyとかないの
285 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:25:03 ] いいからこっちでやれ Railsとスレ分けられるんだからGUIとだってスレ分けられるだろ Ruby で GUI するスレ pc12.2ch.net/test/read.cgi/tech/1269609576/
286 名前:デフォルトの名無しさん [2010/03/28(日) 11:39:52 ] ここは初心者スレだからGUIの話もオッケーよ
287 名前:デフォルトの名無しさん [2010/03/28(日) 11:46:26 ] プログラミング初心者には、GUIってのは、すでに出来上がって動いている ものを操作するのは分かりやすいが、それをそう見えるように作るのは面倒 くさいということは知って欲しいなー。 テキストメッセージ1つのウィンドウを出す程度で満足なら別だけど。
288 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:59:32 ] Rubyで使えるGUIライブラリってどんなのがあるの? WndowsFormは使えんよね?
289 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:03:19 ] attr_writer :hogeとdef hoge=(h);@hoge = h; endは 同じ意味だと思いますが、どっちを使うべきなんですか?
290 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:10:29 ] >>289 前者は後者の意味であるということを理解してるならどっちでもいいよ 作ってる最中は attr のことが多いと思う 条件演算子→if式→case式 と移行するのと似たような感じで 結局後者(でメソッド内部で正規化処理つき)になることが少なくない
291 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:17:26 ] >>288 Ruby/Tk VisualuRuby Ruby/Qt4 Ruby/GTK2 WxRuby FxRuby Apollo Ruby/FLTK RubyShoes なんか終わってるのもいくつかあるが気にするな
292 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:22:24 ] >>290 ありがとうございました
293 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:22:57 ] >>291 ありがとうございました
294 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:01:29 ] test do 例外が発生する可能性のある処理 end ---------------------------------------------------------------------------- def test begin 例外が発生する可能性のある処理 yield ensure;end end このようなコードを書いたのですが、test do; endの適切な処理がわかりません 教えてエロ人!!
295 名前:デフォルトの名無しさん [2010/03/28(日) 13:06:36 ] 発生したときどうしたいのさ?
296 名前:294 mailto:sage [2010/03/28(日) 13:18:57 ] >>295 test do endの中で全ての例外を処理し、 例外が発生した時はメソッドをreturnで終了させたい
297 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:24:46 ] > test do endの中で全ての例外を処理 えー そういう場合はメソッドのユーザーが自分の責任で begin で括る begin test do ... end rescue => e error_handling(e) end
298 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:30:30 ] >>297 THX
299 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:51:35 ] チルダとダブルクォーテーションの使い分けって何かあったっけ? 何か重要なものがあったような気がするけど思い出せないんだ
300 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:55:41 ] 質問が微妙によくわからないけどこれ置いとく doc.okkez.net/187/view/spec/literal ja.wikipedia.org/wiki/%E3%83%81%E3%83%AB%E3%83%80
301 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:01:10 ] チルダ ( ~ ) ? Ruby で ~ を使うのは、マッチング演算子の =~ とその否定の !~ と、 前置の単項演算子で、整数のbitwise-not、正規表現オブジェクトと $_ とのマッチ、 IPAddr オブジェクトのbitwise-not、なので、ダブルクォートとの使い分けをする場面は ないと思うが...
302 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:08:37 ] 間違ったプライムだ 文字やら文字列列をくくる時なんかに使うアレ
303 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:10:41 ] ′や″をRubyで使うことはない
304 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:13:32 ] 「円記号でエスケープ」と聞いて¥を使ってしまうようなピュアな人がここにも…ッ というか文字列括る記号はさっき出てた ttp://doc.okkez.net/187/view/spec/literal#string このへんで用が済みそうだが
305 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:17:51 ] うーn?%記法とやらを使えってか? >>doc.okkez.net/187/view/spec/literal とりあえずこれ読んでくる
306 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:20:10 ] LispやErlangなんかのフォーマット文字列だっけ チルダ使うの
307 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:20:46 ] 親クラスのアトリビュートにアクセスするためには、どうすればいいんですか?
308 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:26:42 ] 記号の区別の知識があることがやっぱ前提だよな "''゛“"”′″`'‘’
309 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:29:56 ] >>307 Rubyにはアトリビュートというものはない 継承されたクラスの a というメソッド内部から継承元の同名のメソッド a にアクセスするには super を使う
310 名前:307 mailto:sage [2010/03/28(日) 16:34:42 ] >>309 そんじゃ、親クラスで定義した@hogeには サブクラスから(メソッドを通さず)アクセスできないってことですか?
311 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:40:09 ] >>310 え、いやふつーにアクセスできると思うんだが irb> class C; def initialize; @hoge="hoge"; end; end irb> class C2 < C; def hoge; @hoge; end; end irb> p C2.new.hoge "hoge"
312 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:59:36 ] 読み方いくつかバリエーションあるんだが " ダブルクォート(ダブルクォーテーション) ' シングルクォート(シングルクォーテーション) ` バッククォート でいいよな 表記の揺れは許容
313 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:05:59 ] ( ) カッコ、パーレン、小カッコ { } ブレース、波カッコ、カーリーブラケット [ ] ブラケット、角カッコ
314 名前:デフォルトの名無しさん [2010/03/28(日) 17:08:01 ] シェルスクリプトやPerlの知識はいくらか前提にしたいなー。
315 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:15:11 ] プライムは 1′23″ とか書くときに使う記号だな
316 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:58:23 ] >>312 「マーク」を付けないところが童貞っぽい。 IPアドレスをIPって略しちゃうのと一緒で。
317 名前:307 mailto:sage [2010/03/28(日) 18:00:19 ] >>311 JRubyでJavaのコードを継承しているんだけど なぜかnilになっちゃう
318 名前:307 mailto:sage [2010/03/28(日) 18:20:48 ] どうやら、JRubyからJavaのフィールドにアクセスするためには 絶対publicじゃないとダメみたい しかもJRubyではローカル変数としてアクセスするみたい class Super{ public String str = "str" } class Sub < Super def initialize p str end
319 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:11:37 ] >>315 わかったからもうやめて 俺のHPは0だ
320 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:20:27 ] >>316 ダブルクオーテーションとダブルクオーテーションマークに何か違いでも
321 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 19:43:07 ] フルだとどうにも長いからな IPアドレスなんかとは違って紛らわしい候補はないから縮めてもらっても意味はわかるが そもそもがダブルクとかシングルクとかそれくらい短いといいのに
322 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:04:45 ] 一重引用符、二重引用符で各5文字だ。
323 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:19:17 ] >>322 それは、カギカッコと区別がつきづらいので使わないで欲しい。
324 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:21:07 ] 半角単引用符 半角複引用符 6文字でFA
325 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:24:53 ] ほほう«ギュメ»は‹引用符›ではないと申されるかこれは異なことを …いいよもうシングルクオートで
326 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:27:50 ] 次の瑣末粘着者さんどうぞ
327 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:06:44 ] メソッドの名称とかモジュールの名称って 短い方がプログラムの実行速度が速くなるとかありますか?
328 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:12:59 ] …いつのBASICだ 気にする必要はない 変な省略はせずにわかりやすい長めの名称推奨
329 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:38:43 ] 大きなオブジェクトを変数に入れた後は変数に nil を明示的に指定すると メモリ内に巨大なデータがいつまでも残ったままになったりしません とか書いたら信じて実行してくれるだろうか
330 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:49:44 ] irb だとわかるけど、 require するとけっこうメモリ食うよね
331 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 01:56:45 ] win32版Ruby1.87(OSはWindowsXP)9で、漢字を表示するようなスクリプトをUTF-8で保存して スクリプト一行目に#! ruby -Kuと入れて実行したら文字化けした -KsにしてS-JISで保存して実行したら直った ・・・ちゃんとBOM無しとやらにしたのに何でかしら?Ruby本体の設定とかあって、それを間違えてるとかかしら? ちなみに使用したのはサクラエディタ
332 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:12:20 ] >>331 Windowsという事は、コマンドプロンプトで実行したという事ですね。 コマンドプロンプトはデフォルトではSJISしか正しく表示できないのです。 コードページをUTF-8に変更すれば表示できると思われます。 方法は「コマンドプロンプト コードページ UTF-8」でググってみて下さい。
333 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 02:38:29 ] >>332 d コマンドプロンプトちゃんの設定が悪かったのか にしてもこんな設定があったとは・・・
334 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 07:43:46 ] chcp65001 のことだったらまともに動かないし使えねーんだが
335 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 07:47:45 ] >>334 全く問題ない文字を表示してるだけなら問題はない >>333 はそのパターンだろう
336 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:48:03 ] QueueにデータAが無かったら、データAを追加する 処理を書きたいのですが どのようにして確認すればいいのでしょうか?
337 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 13:23:48 ] デフォルトではQueueは存在しないので、 自分で作るかArrayで代用するか適当なライブラリインストールする必要がある …で、Arrayで代用する場合はまあ include? でいいんじゃね queue = Array.new queue.push('one') queue.push('two') queue.push('three') puts queue.shift puts queue.shift queue.push('four') if queue.include?('three')
338 名前:デフォルトの名無しさん [2010/03/29(月) 13:24:23 ] RubyのQueueはスレッド間のデータ受け渡し用に用意されているもので、 汎用のデータコンテナではないと思う。 一応 Queue のインスタンス変数 @que が内部で持ってるデータのリスト なので、これを無理矢理参照して include? でデータの存在をチェック出来 るけど、素直にArrayをshift/pushもしくはunshift/popのペアを使って キューと見なすほうがよいと思う。
339 名前:336 mailto:sage [2010/03/29(月) 13:33:19 ] >>337-338 よーくわかりました。 Array.newとQueue.newの2つを使いたいと思います ありがとうございました
340 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:12:32 ] File.exist?(filename)とFile.exists?(filename) の違いがわからない 単に書き方が違うだけか?
341 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:21:06 ] >>340 前者推奨 sつきの後者は互換性のために残されているだけで1.9では既に無い ttp://www.ruby-lang.org/ja/man/html/obsolete.html#FileTest.2eexists.3f 見つけるの苦労したぞ わかりやすいとこに置いておいてくれ
342 名前:デフォルトの名無しさん [2010/03/29(月) 20:15:24 ] その後復活したけどな svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/file.c?view=diff&r1=14389&r2=14390 しかもobsoleteもなくなってるという
343 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:37:30 ] >>340 なるほど、んじゃあexist?(hoge)を使うようにしよう ともかくありがとう
344 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:56:56 ] javaのつもりでcase 文で一行ごとにbreakを入れたら酷い目にあった 知ったかは危険だ・・・
345 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:40:13 ] スレッドの中から@arrray.shift()としたのですが、 スレッドの外から@arrayを見るとちゃんと動作していません どうやったら、整合性が取れるようになりますか?
346 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 00:38:52 ] >>345 > どうやったら、整合性が取れるようになりますか? typoを無くす
347 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 05:58:33 ] >>336 それはキューではない。
348 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 08:12:10 ] >>346 何それ?
349 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:23:04 ] >>342 まあ 1.9.2 で実際に出たら考える
350 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 10:25:27 ] shiftできるんだから、@arrrayの方が正しんだな。
351 名前:デフォルトの名無しさん mailto:sage [2010/03/30(火) 19:18:13 ] BitmapArrayって何ですか?
352 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 08:49:43 ] def hoge *argsのとき、 hoge {:fuga => :piyo} で呼ばれたのか、 hoge :fuga => :piyo で呼ばれたのか判断する方法ってあるんですか?
353 名前:352 mailto:sage [2010/03/31(水) 09:06:16 ] あ、 hoge {:fuga => :piyo}じゃブロックになっちゃうから hoge({:fuga => :piyo})ですね。
354 名前:デフォルトの名無しさん mailto:sage [2010/03/31(水) 09:14:02 ] Ruby にはキーワード引数というものは存在しない Symbol キーの Hash をそれっぽく使っているだけ メソッドの引数内に限り、解釈の混乱の起きない範囲で Hash リテラルは { } を省略することができる hoge(:key1 => val1, :key2=>val2) と hoge({:key1 => val1, :key2=>val2}) は同じだ huga(param, {:key1 => val1, :key2=>val2}) と huga(param, :key1 => val1, :key2=>val2) も同じ
355 名前:352 mailto:sage [2010/03/31(水) 10:02:08 ] どもです。わかりました。
356 名前:デフォルトの名無しさん [2010/04/02(金) 04:53:24 ] 正規表現で得た複数のデータをそれぞれ配列に格納して、 その配列を比較するにはどうすればよいのでしょうか。
357 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 10:02:28 ] そのまんま1処理ずつ書けばいいじゃん なんでもかんでも1フレーズに押し込めようとするのは損
358 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 13:57:20 ] >>356 String#scan www.ruby-lang.org/ja/man/html/String.html#scan
359 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 01:27:32 ] 鬼車を使いたいんですが、1.87に実装されていますか? 1.91は不安なので。
360 名前:デフォルトの名無しさん [2010/04/04(日) 02:47:06 ] リテラルは無理だが、oniguruma gemはある。
361 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 12:02:56 ] >>360 どうもありがとうございます。今から試してみます。 ところでみなさん、1.9系統への移行はいまだに時期尚早だと思いますか? 正式リリースから一年以上経ったし、そろそろ良いかなーとも思っているんですが。 みなさんはいまだに何か不都合とかありますか。
362 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 14:42:20 ] system("make")等でmakeを実行しつつログを保存したいのですが 良い方法はないでしょうか?IOクラスのパイプとかリダイレクトとか良く分からなくて… text=`make`ではmakeの出力がリアルタイムで確認できず system("make 2>&1 | tee hoge.txt")では、$?でmakeの戻り値を 取得できなくなってしまうので困ります(失敗したらexitしたいのです)。
363 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 14:52:42 ] >>362 1.8 なら fork と exec で自分でがんばるしかないと思う。 1.9.1 なら spawn で、1.9.2 なら open3 で、できるかもしれない。
364 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 15:32:31 ] spawn for legacy github.com/ujihisa/spawn-for-legacy
365 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 17:33:45 ] Structを要素とする2次元配列の消費メモリが大きくて困っています 500個 * 約13000個 * 要素数5の構造体(整数4つ+文字列)のデータで 2Gbyte以上消費します(Cで書けば150Mbyte程度で収まる) Rubyではこの程度のメモリ消費は普通なのでしょうか? あるいは使い方やコツ等が分かっていないのでしょうか? 環境はruby1.8.7 on MacOSXです
366 名前:362 mailto:sage [2010/04/04(日) 17:34:10 ] >>363 >>364 ありがとうございます。1.9.1だったので以下のようにしてみました。 こういうコードでいいのか分かりませんが、とりあえず目的は達成できました。 r,w = IO.pipe pid = spawn("make", STDOUT=>w) spawn("tee build.log", STDIN=>r) ret = Process.waitpid2(pid)[1].to_i w.close if ret != 0 puts "[Error] (build) #{src}" exit 1 end
367 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 17:40:08 ] >Rubyではこの程度のメモリ消費は普通なのでしょうか? 普通
368 名前:デフォルトの名無しさん mailto:sage [2010/04/04(日) 18:56:57 ] ruby1.8.7がruby1.9系の良いところをフィードバックしたバージョン rails3がruby1.9対応だからみんなそれまでは焦って動くことはなさそう。 メモリ消費でCと比べるのはrubyがかわいそう javaだってcの10倍以上使っておかしくないんだぜ? ruby1.9系が1.8系よりも良い所って 今のところガーベージコレクションが良いって記事しか読んだ事無いな。
369 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 10:54:00 ] >>366 わざわざtee使って複数プロセスにするから面倒な事になるんだろ。 ret = IO.popen("make", "r") {|mk| open("build.log", "w") {|log| IO.copy_stream(mk, log)} Process.wait2(mk)[1] } unless ret.success? abort "[Error] (build) #{src}" end IO.copy_streamがなければそのくらい作れ。
370 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 10:55:53 ] あ、teeになってないな、これだと。 copy_streamの代わりにこうでもしてくれ。 mk.each{|line| log.puts(line); puts(line)}
371 名前:365 mailto:sage [2010/04/05(月) 17:58:32 ] >>367 ,368 そうですか・・ 倍程度かなと勝手に予想してましたが、そんなに甘くはないですね ありがとうございました。
372 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 22:51:12 ] 書きやすくて実行しやすくてなおかつ投げ出したくならない程度の実行速度も求めた結果、 Ruby においてはメモリはすっげぇ大量に消費される ご存知の通り、プログラムにおいて実行速度とメモリ使用量はトレードオフだ どっちも良くしたい場合はアセンブラかせめて C で書か「ねばならない」 大量のデータを処理するのでなければ常識的な範囲内に収まるものではあるのだが、 大量のデータを処理することが事前にわかっているのなら Ruby を使わないほうがたぶん幸せ
373 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:17:25 ] 馬鹿な事いってんじゃないよ、 ムーアの法則知らないのか? それは、10年前のpcの話だろ
374 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:22:18 ] >>373 何言ってるの いつの時代もCPUは100パーセント使用されるし メモリはスワップにまで突っ込むし HDDは90%まで埋まるもんだよ 10年前のデータ量を現在のマシンで取り扱うなら、君の言ってることは真だろうね
375 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:34:47 ] ムーアの法則を知っていてパーキンソンの法則を知らないのはニワカ
376 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:35:36 ] >>372 大量のデータでまったく同じ処理を何回もするならそうかも知れない (大量の定義にもよるが) あるいはとにかく速さを要求されるならそうかも知れん ただ,大量のデータでもそんなに何度もしないならRubyの方が幸せかも知れん たとえばRubyで処理に1日かかってアセンブラなら半分の時間でできるとしよう coding/debug でその差以上得しなければ時間的にさえ得にならない 人件費ではさらに得にならない coding のオーバーヘッド評価しないと意味が無いから状況に依りすぎる 有名な教訓を思い出すなぁ "premature optimization is the root of all evil"
377 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:45:13 ] >>374 いわゆるデスクトップ版Linuxを使ってるとその思いが強くなる 10年くらい前は「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い 5年くらい前には「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思い 今年インストールしたLinuxでも「もうちょっとマシンが早かったらこれすげえ快適なんじゃね!?」と思ってる
378 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 23:59:29 ] >>377 いいかげんマシン買い換えようよ
379 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 00:31:18 ] >>378 えっ
380 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 14:16:53 ] 今すぐtwmに変更するんだ!
381 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 15:39:04 ] 通年重いのはツールキット部分だな 起動するGUIアプリケーションが全部OpenMotif使うようになるとかなら歓迎だがそうでもあるまい
382 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 18:11:00 ] Ruby 使うって時点で GTK だったりするのがアレだ罠