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