Ruby 初心者スレッド ..
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)
Wikipedia項目リンク
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
d
コマンドプロンプトちゃんの設定が悪かったのか
にしてもこんな設定があったとは・・・
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 だったりするのがアレだ罠
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5390日前に更新/97 KB
担当:undef