Ruby 初心者スレッド ..
[2ch|▼Menu]
256:デフォルトの名無しさん
08/04/24 00:28:07
際だって使われているGUIツールキットはないと思うが、tkは最初から
付いてくるから比較的メジャーと思われる。
自分はマカーなので、必要な場合はOSに付いてくるRubyCocoaを使う
ことになると思うけど。

Javaもかじってる人ならJRubyでSwing使うというのもアリかね。


257:デフォルトの名無しさん
08/04/24 00:31:29
>>255
FXRuby

258:デフォルトの名無しさん
08/04/24 00:35:52
railsでいいじゃん

259:デフォルトの名無しさん
08/04/24 00:38:22
>>255
URLリンク(www.gesource.jp)
おいらはApollo派


260:デフォルトの名無しさん
08/04/24 00:41:57
配布するのか、自分の特定のマシンで使うのかにもよるよな

261:デフォルトの名無しさん
08/04/24 01:00:03
漏れはRuby/Gtk2
Gnomeだからそれに合わせて。Gladeとかあって使い勝手も悪くない。

262:255
08/04/24 01:07:39
>>260
一応は仕事で補助的に使うツールです
基本は自分のPCで動けばOKですが
状況によっては周囲に配らないとも言いきれませんので
配布時のパッケージングに優れていると助かりますね



263:255
08/04/24 01:09:43
あと、OSはWindowsXPです
今更言う事でもありませんが、念の為…

264:デフォルトの名無しさん
08/04/24 01:12:18
>>255
wxRubyかFXRubyの2択だな

265:デフォルトの名無しさん
08/04/24 01:15:49
VisualuRubyはダメなのかな?
exerbでexe化もできるみたいだし。


てか、ほんと「これだ!」ってのはないと思う。

266:デフォルトの名無しさん
08/04/24 09:48:06
俺AvtiveRubyとHTA

267:デフォルトの名無しさん
08/04/24 10:24:49
HTA+ActiveScriptRubyなんて組み合わせ知ったときには
これぞ俺が今まで追い求めていたものだと直感した
GUIはHTMLで記述、中身の処理はRuby。夢のようだ

なのになんで使わなくなったんだっけ俺

268:デフォルトの名無しさん
08/04/24 13:01:03
インターフェイスはrubyになるけど中身はIEのままじゃねそれ
eachとかProcとかないんじゃ

269:デフォルトの名無しさん
08/04/24 14:45:06
>>247
>>254
xmlrpcやjsonでお互いのプログラム間で通信したらいいのかな?

270:デフォルトの名無しさん
08/04/24 17:24:55
>>255
反則っぽいけどwebrickでアプリケーションサーバを作るとか
guiとかの環境依存性も配布する必要も無い
ついでにdrbで分散処理も追加

271:デフォルトの名無しさん
08/04/25 00:47:28
>>255
>262,263の条件ならC#かJavaがいいと思う。
UNIX系でも使う可能性があるなら>264かな。

272:255
08/04/25 02:51:02
色々候補ありましたが、日本語周りに確証が欲しかったので
差し当たりVisualuRuby触ってみる事にします
皆様レス有難うございました

しかし決め手が無くて色んな種類があるという状態は
選択肢が広いとは言え、個人的には苦手だ…

273:デフォルトの名無しさん
08/04/25 04:29:00
パスが入ってる文字列のファイルセパレーター(/や\)を,
/からwindowsの\に変換するメソッドは有りますか?


274:デフォルトの名無しさん
08/04/25 05:51:48
>>273
文字の置き換えだろ?
リファレンスマニュアルでStringの項を読みなさい

275:デフォルトの名無しさん
08/04/25 23:54:28
文字列の50行目から100行目の範囲に対して、正規表現で検索をしたいのですが
今は
str.split('\n).each do |line|
cnt += 1
line =~ 〜 if(50<=cnt && cnt<=100)
end
のようにしているのですが、strはかなり長い文字列なので、無駄な処理をしている気がします
もっと上手は方法はないでしょうか?

276:デフォルトの名無しさん
08/04/26 00:22:53
>>275
とりあえず、splitする必要ないでしょ

277:デフォルトの名無しさん
08/04/26 00:31:59
>>275
ややトリッキーな方法だが

target_lines = str.split($/).slice(50..100)
if target_lines then
 target_lines.each do |line|
  line =~ 〜
 end
end

278:デフォルトの名無しさん
08/04/26 00:39:05
>>276-277
ありがとうございます

279:デフォルトの名無しさん
08/04/26 10:18:49
>>275

str.each_with_index do |line, cnt|
next if cnt < 49
line =~ 〜
break if cnt >= 99
end

1.9なら
str.each_line.with_index

280:デフォルトの名無しさん
08/04/26 10:32:56
next unless (50..100) === cnt


281:デフォルトの名無しさん
08/04/26 12:00:36
何を無駄って考えてるかによりそう
strが巨大な配列になってるのがヤだっていうならsplitとeachは全滅だな

282:デフォルトの名無しさん
08/04/26 13:58:48
Rubyからコマンドを実行させるには、execとかsystemとかいろいろあると
思うんですけど、出力結果を文字列として取得する場合はどうすればいいんですか?

ちなみにRuby1.8.6です。

283:282
08/04/26 14:01:07
282です。
できればエラーストリームだけとれるのが望ましいです。

284:デフォルトの名無しさん
08/04/26 14:13:05
URLリンク(kazuho.exblog.jp)
>日本のオープンソース開発者の中で有名なまつもと氏のような方ですらライセンス条件について間違った解釈をしてしまうのである


ほうほう。


285:デフォルトの名無しさん
08/04/26 14:49:08
わざわざ自分のブログ宣伝して回るなよ

286:デフォルトの名無しさん
08/04/26 16:24:59
>>282
* Open3 を使う(require 'open3')
* 自分で作る(open3 は簡単だから、読んでみるといい)
* windowsでは動かないかもしれないが↓
command = 'ls /tmp'
stderr = `#{command} 2>&1 > /dev/null`

287:デフォルトの名無しさん
08/04/26 22:55:11
>>282
$stdout, $stderr を reopen して system

system のいいとこは shell を介さずに実行できるから
コマンドインジェクションを防げる。

288:デフォルトの名無しさん
08/04/27 01:40:40
単純にpopenじゃあかんの?

289:デフォルトの名無しさん
08/04/27 10:50:28
ポペン!

290:デフォルトの名無しさん
08/04/27 18:19:04
あのさ、あるクラス Foo があって、その機能強化版をつくったとき、
クラス名は何にしたらいいと思う?
AdvancedFoo とか ExtendedFoo とか考えたけど、あまりいい名前じゃないといわれた。
かといって、雑多な機能をいくつも付け加えたから、これといって名前をつけにくいんだよな。
なんかいい名前ない?

291:デフォルトの名無しさん
08/04/27 18:26:58
追加する機能をモジュールとして作り、
Fooのインスタンスにextendで機能追加する。

↑という方法では解決できず、どうしても継承でやる必要があるなら
FooWith機能名
とか
機能ableFoo
とか。



292:デフォルトの名無しさん
08/04/27 18:30:36
Fooそれ自体に機能(メソッド)を追加するという方法もある。
あるいはモジュールとして作り、includeする。
Fooのインスタンスはどれでも追加された機能を使える。

class Foo
... # 元の定義
end

# 定義を再オープンして機能追加
class Foo
def 追加機能
end
...
end

>>291のextendする方法は、Fooクラスのインスタンス全体ではなく、
Fooの特定のインスタンスだけに機能を追加する方法。


293:デフォルトの名無しさん
08/04/27 18:32:40
クラスに二つ以上の責任があるんじゃないか?
できれば分割して名前を明示できるようにした方がいい

294:デフォルトの名無しさん
08/04/27 19:46:16
>>291,292
もとのFooは残す方向なので(ほかに継承で使っている人がいるから)、Foo自体を拡張するわけにはいかないんです

>>293
まあそうなんですけど、Rubyの大クラス主義でやっているので。
大クラス主義はたしかに便利なんだよね。既存の他のクラスのインターフェース変えなくていいし。

295:デフォルトの名無しさん
08/04/27 20:19:07
>>294
大クラス主義はキッチンシンクじゃないぞ。

>>290
> かといって、雑多な機能をいくつも付け加えたから、これといって名前をつけにくいんだよな。
どうも行き辺りばったりの感じがするんだが。
UtilFooとでもしとけば。

296:デフォルトの名無しさん
08/04/27 20:45:31
Rmagickで書き込もうとする、もしくは書き込んだ文字列の幅と高さを求めるにはどうすれば用でしょうか?

297:デフォルトの名無しさん
08/04/27 21:48:45
>>296
ImageMagickのコマンドから推測するといい

298:デフォルトの名無しさん
08/04/28 19:42:33
Rubyの利点って何?
Javaプログラマの俺にわかりやすく説明して

299:デフォルトの名無しさん
08/04/28 19:55:52
状況も設定せずに利点を挙げろつってもなぁ。
まずは自分の疑問をわかりやすく説明しる。

300:デフォルトの名無しさん
08/04/28 20:02:49
適当な捨てプロ書くのに凄く楽。

301:デフォルトの名無しさん
08/04/28 20:09:52
>>298
君にとって利点はないと思うよ

302:デフォルトの名無しさん
08/04/28 20:37:12
気楽に楽しくプログラミングできる

303:デフォルトの名無しさん
08/04/28 20:37:35
>>301
その返し方は誤解を与えるかもな。
ほとんどの人にとって利点はないと答えたかったんだろ?

304:デフォルトの名無しさん
08/04/28 21:00:15
>>300
それあるなぁ。
ワンライナーも併せて便利

305:デフォルトの名無しさん
08/04/28 21:10:58
>>303 一人で納得してれば

306:デフォルトの名無しさん
08/04/28 21:51:50
rubyで大枠の処理を書いて、細かいところはJavaを呼び出す

307:デフォルトの名無しさん
08/04/28 22:09:01
JRubyでうんたらかんたらできる。
初期起動がかなり遅いけど。

308:デフォルトの名無しさん
08/04/28 22:36:39
Rubyの利点って何って話だけど、
それよりむしろJRubyの利点が知りたい。

309:デフォルトの名無しさん
08/04/28 22:38:33
JRubyの利点ってJavaのクラスが呼び出せるとかじゃないのかな。
これができると膨大なJavaのライブラリも使えるし。

個人的にはSwingあたりのGUIライブラリが楽に使えるとありがたい。


310:デフォルトの名無しさん
08/04/28 22:40:57
大量にあるJavaの資産が使えるのがありがたい
標準のライブラリだけで大抵のものが一揃いして、もちろん完成度も高め。Swingもあるし

311:デフォルトの名無しさん
08/04/28 22:47:59
>>309
>>310
へー、そうなんだ!
JAVA屋さんには便利なのかな

そういえばIronRubyはどうなったんだろう

312:デフォルトの名無しさん
08/04/28 22:55:35
>>308
(顧客の)サーバにRubyのバイナリを入れるのは(政治的な意味で)非常に大変だが、
Javaはデフォで入ってるので、jarを1個放り込めばよいJRubyは非常にありがたい。


313:デフォルトの名無しさん
08/04/28 23:12:25
>>312
その発想はなかった!
業務で使ってる人は大変なのね

314:デフォルトの名無しさん
08/04/28 23:40:01
>>312
これあるよねー
unzipコマンドがない客先のサーバでzipファイルを解凍しなきゃいけなくて
さてどうしようと思ってたら、jarコマンドで解凍できた。
このときはjavaすげーとおもった。

315:デフォルトの名無しさん
08/04/29 00:18:07
rubyの開発者
凄い人なんだろうけど、あらゆるruby本の監修になって名前貸すだけで稼ぎまくってるあの魂胆が嫌いだ

316:デフォルトの名無しさん
08/04/29 00:20:36
成果をねたむ足引っ張り合い好きな国民性丸出し
トイレ掃除でもしてろ

317:デフォルトの名無しさん
08/04/29 01:24:23
俺はUSBメモリにruby.exeとmsvcrt-ruby18.dllが入ってるな(他は grep sed)。
これだけでもコマンドプロンプトのお供に使えるところが好き。

Python はライブラリ無いと起動すらしないし、Perl は動くけど glob が使えねえし…。

318:デフォルトの名無しさん
08/04/29 02:03:04
監修料なんて雀の涙だろ。


319:デフォルトの名無しさん
08/04/29 02:15:01
 ヾヽヽ
 (,, ・∀・)チュンチュン
  ミ_ノ
  ″″

320:デフォルトの名無しさん
08/04/29 02:28:02
>>318
どっかの年金では図柄変更バージョンごとに1千万とからしいけど。
図柄かえるだけのバージョンが100くらいある。


321:デフォルトの名無しさん
08/04/29 03:18:35
監修料がわずかって…何を見て言ってんだ?
有名人になると筆者より儲けてるよ

322:デフォルトの名無しさん
08/04/29 03:32:49
何を見て言ってんだ?

323:デフォルトの名無しさん
08/04/29 03:38:27
どぞー
スレリンク(tech板)

324:デフォルトの名無しさん
08/04/29 06:20:24
>>317
やあ俺
シェルと好みのエディタ入れれば、簡易開発環境が出来てしまうのが便利だ

325:デフォルトの名無しさん
08/04/29 08:13:17
>>321
具体例をドゾー

326:デフォルトの名無しさん
08/04/29 09:43:14
>>321
監修するなってこと? なんで? そのメリットは?
「成功者の収入が減ると、貧乏人の俺の胸がすく」という以外のメリットを感じないけど・・・。

327:デフォルトの名無しさん
08/04/29 09:53:42
釣られんなよ、おまいら……。

328:デフォルトの名無しさん
08/04/29 10:31:38
まぁ釣りだったことにしたいだろうなぁ、このフルボッコな状況じゃ。

329:デフォルトの名無しさん
08/04/29 12:53:29
>>320
さすがに公共事業とは事情が全く異なるだろ。
そういうのはまた孫受け曾孫受けで政治家とか○暴とかの
たかり屋に流れるからその分割高だし。

330:デフォルトの名無しさん
08/04/29 13:31:36
ちょっとした質問です。



・・・忘れた

331:デフォルトの名無しさん
08/04/29 13:34:16
すいません、思いだしました!

Rubyで小物でもプログラムを書くときに、
クラス化しますか?
適当に書き下す(とは言っても100行オーバーの大きさ)場合はトップレベル関数ばりばりでも
よいと思うのですが、関数作りまくるプログラミングタイプだと、
いちいち関数化時に変数をグローバルにするのが面倒です。
また、配布とかも考えると、クラス化してライブラリとして使えるようにも、と思ってしまいます。

あなたはどうしてますか?

332:デフォルトの名無しさん
08/04/29 14:01:16
うぜぇw

333:デフォルトの名無しさん
08/04/29 14:02:37
配布を考える場合は、規模問わずほぼ確実にクラス化(モジュール化)する

配布を考えないなら、そのときどき
トップレベル関数(メソッド)から作り始めることもあれば
クラスの設計から始めることもある

ところで
>いちいち関数化時に変数をグローバルにするのが面倒です。
これはどういう意味なんだ

334:デフォルトの名無しさん
08/04/29 14:19:14
この俺がエスパーしよう!

name = gets.chomp
hello = 'ぐっもーにん'
puts "#{name}さん、#{hello}"

をメソッドにすると

def say_hello
puts "#{$name}さん、#{$hello}"
end

$name = gets.chomp
$hello = 'ぐっもーにん'
say_hello

と書かなければならなくなって面倒だとか、たぶんそういう話だ!

335:デフォルトの名無しさん
08/04/29 14:33:57
トップレベルは気持ち悪いからなんでもクラス化

336:デフォルトの名無しさん
08/04/29 14:35:08
とりあえず関数だけで書いて
複雑になってきたらリファクタリングしてクラス化

337:デフォルトの名無しさん
08/04/29 14:42:55
100行くらいなら、多分関数のみ

338:デフォルトの名無しさん
08/04/29 14:47:37
メソッドのことを関数と言ってる奴は同一人物

339:デフォルトの名無しさん
08/04/29 15:12:32
>>333
>>いちいち関数化時に変数をグローバルにするのが面倒です。
>これはどういう意味なんだ

>>334 そのとうりです!!

>>338
トップレベルメソッドというべきでしたか?

340:デフォルトの名無しさん
08/04/29 15:59:49
確か三年ぐらい前に、初心者だった自分も同じようなことを言われたんだが
グローバル変数の使用はお薦めしない(書き捨ての短いコードだとしても)
エスパー>>334の例を借りると

def say_hello(name, hello)
 puts "#{name}さん、#{hello}"
end

say_hello(gets.chomp, 'ぐっもーにん')

こんな風に引数として渡したほうがいい

341:デフォルトの名無しさん
08/04/29 16:47:55
いくらなんでも324はないだろう

def init(opt)
$_option = opt
end
def exe(arg)
if $_option[:foo]

end

init :foo => :bar
exe "hoge"


とか?

342:デフォルトの名無しさん
08/04/29 16:53:28
俺の場合は新規作成した場合、自然と指が

class

って動いちまうなあ。

343:デフォルトの名無しさん
08/04/29 17:03:15
Pythonと比べるとRubyの方が直感的だと感じてしまうのはRubyに毒されたからなのか。
yieldの書き方とかはRubyの方がいいな。

344:デフォルトの名無しさん
08/04/29 17:06:54
コルーチンがわかってないんだろ

345:デフォルトの名無しさん
08/04/29 17:35:41
>>342
毎回指で書くなら自動化すればいいじゃない

346:デフォルトの名無しさん
08/04/29 17:47:28
これがコルーチンか。そう意識してみるとPythonの書き方もこれでもいいかと思えてくる。
でもRubyの方がコルーチンを中断している途中でなんか処理しているってイメージがしやすい気がする。
気のせいか慣れなのかもしれないけど。

347:デフォルトの名無しさん
08/04/29 22:15:27
メソッド・オーバーライトって、具体的に、どんなときに使ったことありますか?

348:デフォルトの名無しさん
08/04/29 22:31:43
ライブラリのメソッドを上書きしたいとき

349:デフォルトの名無しさん
08/04/29 22:49:20
それはわかるんだけど、具体的にどんなメソッドを上書きしたの?

350:デフォルトの名無しさん
08/04/29 23:10:38
inspect はしょっちゅうオーバーライドしてるなあ。
あと to_s も。

351:デフォルトの名無しさん
08/04/29 23:49:21
>>349
OKまずはageだ

・自分で設計したクラスのサブクラスを作ったとき(基本)
・他所から持ってきたライブラリのバグを自分で直すとき
・ライブラリの挙動を少しいじくったり、機能を足したいとき(たいていサブクラスを作って上書きする)

上書きコードがある程度の量になってきたら、自分用のラッパーライブラリを作ることもある

352:デフォルトの名無しさん
08/04/30 00:41:49
再定義はオーバーライト(overwrite)じゃなくてオーバーライド(override)だな。


353:デフォルトの名無しさん
08/04/30 01:19:44
そういえば、Object#inspectって循環参照があるオブジェクトに対してもちゃんと動くよね
これってどうやって検出してるんだろう。inspectは特に引数を受け取るでもないし

354:デフォルトの名無しさん
08/04/30 07:48:36
>>353

Thread.current[:__inspect_key__] でobject_idを覚えてる。

355:デフォルトの名無しさん
08/04/30 09:26:26
>>354
スレッドローカルストレージ使っているのか。なるほど。
353じゃないが参考になった。
これからもあわあわと質問に解凍しやがってください。

356:デフォルトの名無しさん
08/04/30 11:34:29
>>354
そういうことかー。返答ありがとう。

357:デフォルトの名無しさん
08/04/30 18:32:29
javaが呼べるのは便利そうだけど
c++(cじゃなくて)の呼び方がまとめてあるサイトないですか?

358:デフォルトの名無しさん
08/04/30 19:38:33
railsでないRubyではDB操作するのに何が一番使われてますか?
素のライブラリ?DBI?ActiveRecord?

359:デフォルトの名無しさん
08/04/30 23:38:38
O/R MapperならActiveRecordかDataMapper
そうでなければDBIかMySQLライブラリ直書き

360:デフォルトの名無しさん
08/05/01 00:28:23
activerecordだけ使うならrailsでやればいいのに
って思う。

361:デフォルトの名無しさん
08/05/01 00:31:00
「Rails使うならActiveRecord使えばいいのに」なら分かるが
その逆はイミフだなぁ。


362:デフォルトの名無しさん
08/05/01 17:18:14
initializeを勝手に呼び出すのは良くないんでしょうか。

class Foo
  ...
  def refresh
    initialize
  end
end

363:デフォルトの名無しさん
08/05/01 17:38:07
よくないです

っていうか、そういうような処理を initialize に書いたらダメです
たとえば、別途セットアップ系のメソッドを作って、initialize と refresh から呼ぶようにするとかしてください

364:デフォルトの名無しさん
08/05/01 18:32:18
>>363
なんでよくないの?

365:デフォルトの名無しさん
08/05/01 19:28:22
>>340
あー、わかります。

でもRubyは参照渡し?できないですよね。

単発なら返却値で返す。
複数の返却値だとタプル?じゃなくて配列で返して、
 hoge, mage = gethogemage
でよかったと思うんですが、なれてないと妙に気持ち悪いw
みんなこんなのやってんのかな

>>342
まず体を慣らすのはいいかもですねw

私も一番慣れてる言語だと、ファイル新規作成したら無意識でclass構文が書けます(まあ大抵はスニペット使いますけど)

366:デフォルトの名無しさん
08/05/01 22:27:49
>365
Rubyはむしろ全て参照渡しと言っても良いくらいなのだが。

ただし代入(=、+=など)は変数の参照先を変えてしまうので
自身を書き換えるメソッドを使わず代入で書き換えようとした場合
変数の参照先が変わり、値渡しみたいに見える。

例えば文字列なら concat は文字列自身を書き換えるが
+= は新しい文字列を作り変数の参照先を書き換えるので元の変数に影響がない。

FixnumやSymbolなどは、自身を変更するメソッドを持たないので
実質的に値渡しになる。

367:デフォルトの名無しさん
08/05/01 22:29:19
>>364
べつにいいと思うよ、何度呼ばれてもいいように設計されていれば。
foo = Foo.new(0) # Foo#initialize(0) が呼ばれる
foo.do_something!
foo.initialize(0) # リセットする
foo.do_something!
foo.initialize(0) # リセットする
...

もちろん>>363のようにしてもいい。すきにどうぞ。


368:デフォルトの名無しさん
08/05/01 23:57:27
正規表現でCの文字列リテラルにマッチするようなのって書けないでしょうか?
/".*?"/にすると"aaa\"bbb"みたいな場合に"aaa\"で終わってしまいますが全体にマッチして欲しいんです
/".*(?<!\\)"/にしようと思ったら1.8では(?<!)が使えませんでした

369:デフォルトの名無しさん
08/05/02 00:03:40
"([^"]*?\\.)*.*?"
とかよく書くけど、どうかな

370:デフォルトの名無しさん
08/05/02 00:12:20
/"([^"\\]|\\.)+"/
こんな感じ?

371:デフォルトの名無しさん
08/05/02 00:28:07
>>369 >>370
どちらでもいけました、ありがとうございます!
なんでこれでいいのかまだ良くわからないので頑張って解読します

372:デフォルトの名無しさん
08/05/02 02:12:18
>>371
/"[^\\"]*(\\.[^\\"]*)*"/

こっちのほうが早いかな。

詳説 正規表現を読むのをオススメするよ

373:デフォルトの名無しさん
08/05/02 02:15:20
db等の外部リソースを使った時は
Rubyの終了時にメモリは自動的に解放されているのでしょうか?
明示的に解放しないとだめですか?

374:デフォルトの名無しさん
08/05/02 03:21:27
ここでいいのか不明なのですが…もし良ければおしえてください

やりたいことは
CarbonEmacs上にて起動したirbで
require 'rubygems'
を行いたい。です。

環境は
OSX10.4にてCarbonEmacs2008春版を使用しています。
rubyはMacPortsからインストールしたものを使用し、
rubygemsもMacPortsからインストールしました。

375:374
08/05/02 03:23:56
以下Terminal.appから実行した結果です
/Users/hoge% uname -a
Darwin hoge.local 8.11.1 Darwin Kernel Version 8.11.1: Wed Oct 10 18:23:28 PDT 2007; root:xnu-792.25.20~1/RELEASE_I386 i386 i386
/Users/hoge% ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin8.11.1]
/Users/hoge% which ruby
/opt/local/bin/ruby
/Users/hoge% gem -v
1.1.1
/Users/hoge% which gem
/opt/local/bin/gem
/Users/hoge% echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
/Users/hoge% irb
irb(main):001:0> puts $:
/opt/local/lib/ruby/site_ruby/1.8
/opt/local/lib/ruby/site_ruby/1.8/i686-darwin8.11.1
/opt/local/lib/ruby/site_ruby
/opt/local/lib/ruby/vendor_ruby/1.8
/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin8.11.1
/opt/local/lib/ruby/vendor_ruby
/opt/local/lib/ruby/1.8
/opt/local/lib/ruby/1.8/i686-darwin8.11.1
.
=> nil
irb(main):002:0> require 'rubygems'
=> false
--------
rubygemsをrequireしてもエラーになりません。
(.irbrcにてrequire済なので再読み込みはしませんが)


376:374
08/05/02 03:25:02
対してCarbonEmacs上のrun-rubyにて起動したirbでの実行結果です
irb(main):001:0> puts $:
/usr/lib/ruby/site_ruby/1.8
/usr/lib/ruby/site_ruby/1.8/powerpc-darwin8.0
/usr/lib/ruby/site_ruby/1.8/universal-darwin8.0
/usr/lib/ruby/site_ruby
/usr/lib/ruby/1.8
/usr/lib/ruby/1.8/powerpc-darwin8.0
/usr/lib/ruby/1.8/universal-darwin8.0
.
nil
irb(main):002:0> requrie 'rubygems'
NoMethodError: undefined method `requrie' for main:Object
from (irb):2
--------
実行時のパスが異なるようです
どのようにしたら、この問題を解消できるでしょうか。

377:デフォルトの名無しさん
08/05/02 03:33:48
うん、そのtypoは俺もよくやるよ

378:374
08/05/02 03:52:32
>>377
まちがえました…ご指摘ありがとうございます
typoしなくても以下の通りです

irb(main):001:0>
No such file to load -- rubygems
from (irb):1:in `require'
from (irb):1


379:デフォルトの名無しさん
08/05/02 05:40:38
>>366
オブジェクトが参照なのと、引数の参照渡しを一緒にスンナ
何が「すべて参照渡しと言ってもいいくらい」だ

380:デフォルトの名無しさん
08/05/02 12:10:57
「参照の値渡し」とか「オブジェクト渡し」とか言われる形態だな

381:デフォルトの名無しさん
08/05/02 14:35:21
>>378
FinderからではなくTerminal上で open -a Emacs とする、
もしくは .emacsに irb の位置をフルパスで指定する、のどちらか。

後者なら、~/.emacsなどに
(setq ruby-program-name "/opt/local/bin/irb")
と書けばいいと思う。たぶん。


382:デフォルトの名無しさん
08/05/02 15:43:21
TechCrunch Japanese アーカイブ ? Twitter、Ruby on Railsを放棄か
URLリンク(b.hatena.ne.jp)

383:デフォルトの名無しさん
08/05/02 18:21:49
Emacs から info で Ruby のマニュアルを調べたいと考えているのですが、
現在、配布されているドキュメントは html 形式のみですよね

Ruby 1.4 の時に配布されていた info
ruby-texi-1.4.tar.gz
も、ネット上のどこにも落ちていない…

384:374
08/05/03 00:25:29
>>378
感謝です。おっしゃるとおりでした。
後者も有効です。

385:デフォルトの名無しさん
08/05/03 17:38:08
Rubyに抽象メソッドって無いの?

386:デフォルトの名無しさん
08/05/03 18:14:12
>>385
実行前に実装を強制させる仕組みはない。

定義してなければ呼んだときにmethod_missingが呼ばれる。
あとは
スーパークラスで抽象メソッドにしたいメソッドを定義して
raise NotImplementedError
するとか
inheritedフックを使って、継承した時点でチェックするとか。


387:デフォルトの名無しさん
08/05/03 18:31:01
>>386
Class#inheritedがよさげです
ありがとうござました

388:デフォルトの名無しさん
08/05/03 18:45:07
inheritedって class Hoge < Moge の中を実行する前に呼ばれてるような。


389:デフォルトの名無しさん
08/05/03 22:45:28
どうしてruby使ってるの?
pythonでなくてrubyを使う理由って何でしょう?
日本人が作ったのが誇らしいとかですか????

390:デフォルトの名無しさん
08/05/03 22:50:50
?が2個以上連続しているレスは釣り

391:デフォルトの名無しさん
08/05/03 23:15:38
Ruby 初心者スレッド Part 18
スレリンク(tech板:623番)

623 名前:デフォルトの名無しさん[sage] 投稿日:2008/03/24(月) 14:34:59
どうしてrubyなの?
実績も何も無い言語ですよね
pythonじゃなくてrubyを使う理由を一つでもいいから教えてください
開発者が日本人なのが誇らしいとか??????

392:デフォルトの名無しさん
08/05/03 23:18:17
>>389
どうして日本語使ってるの?
英語でなく日本語使う理由って何でしょう?
日本人が作ったのが誇らしいからですか????

393:デフォルトの名無しさん
08/05/04 01:11:30
イエス!ジャパニーズ!
ノー!フューチャー!

394:デフォルトの名無しさん
08/05/04 02:41:51
pythonはopen classじゃないとかいろいろめんどい

openclassはちゃんとしたアプリがつくれない、って言われてるけど
その通りだと思う。でもスクリプト(笑)言語でちゃんとしたアプリは
作らないから問題ない。

395:デフォルトの名無しさん
08/05/04 07:31:41
式と文や、メソッドと属性なんかが分かれてるのが気に入らない。

396:デフォルトの名無しさん
08/05/04 11:46:23
クラス内部でしか使わないサブルーチンのようなメソッド定義ってできますか?
たとえば、
class Hoge
def a(int1, int2)
return int1+int2*int2
end

def self.b(int)
p a(3, int)
end
end

Hoge.b(5)

の様には書けないんでしょうか。
classとselfとHogeを外すと正常に動作するんですが。

397:デフォルトの名無しさん
08/05/04 11:55:54
Pythonは「メソッド=メソッドオブジェクトが入った属性」な感じ?
メソッド側に属性を統一するのがRuby流で
属性側にメソッドを統一するのがPythonって思ってる。

俺の場合はlambdaの使い難さで使わないけどな。>>Python
文が書けないし、構文自体が無茶になるから
結局、一時的な関数内関数を書きまくることに。

398:デフォルトの名無しさん
08/05/04 11:58:13
aをselfしてprivateに指定するんでしょうか?


399:デフォルトの名無しさん
08/05/04 12:03:11
>>396
クラスメソッドとインスタンスメソッドと特異メソッドの勉強が必要

400:デフォルトの名無しさん
08/05/04 12:06:21
観念的なのは10冊くらい読んだのですが、結局、よくわからんのです。
実際の挙動というか、メモリ上の状態を記述しているような
説明がないので。
一応、インスタンスはコピーという感じで良いんでしょうか。
クラスと特異の実際の状態が掴めないのでよく解りません。


401:デフォルトの名無しさん
08/05/04 12:17:25
>>400
中田育男先生の
コンパイラの構成と最適化 お勧め

402:デフォルトの名無しさん
08/05/04 12:20:51
つprivate_class_method

403:デフォルトの名無しさん
08/05/04 12:34:20
>>396
self.bの定義の中ではselfは(挿入されている特異クラスはさておき)
Hogeというクラスそのものなわけだが、このとき(レシーバを
省略した)aの呼び出しでも、当然レシーバはself(=Hogeクラス)
になる。



404:デフォルトの名無しさん
08/05/04 13:04:58
>>400
この辺はじっそうによるからなあ。
コード書いてみて、実験したりして挙動を確かめる方が身につくよ。
本も大事だけどさ
コード書かないで理解は無理だべさ

405:デフォルトの名無しさん
08/05/04 13:18:59
>>396
まずどういう目的で、何をするためのスクリプトを書いてて詰まったのか
そこを書いた方が回答しやすい

学習目的なら、特異メソッド(Hoge.b)の理解は後回しで良い
それよりも、まずクラスとインスタンスの概念を理解することが先

406:デフォルトの名無しさん
08/05/04 14:10:12
>>405
目的はある処理をするクラスを作っていて、
クラス内部の処理を解りやすくするために、関数で処理を
まとめようとしていました。
色々と処理の分岐があるので、その方が解りやすく書けるからです。
新たにクラスを作るほどは大きくなく、下手に複数のクラスにして
データのやりとりで悩まなくていいし、1ファイルに納めるのに
都合が良いからです。

しかし、メソッドを定義してやると、クラス外からも呼び出せるし、
何か気持ち悪いので良い方法はないのかと思って聞いてみました。

そもそも、クラスの使い方が間違ってるような気もしていたので。

クラスから自身を呼んでインスタンス化するというのも、
自身の、呼び出した部分のコードがメモリに読まれるので、無駄な気がするし。


407:デフォルトの名無しさん
08/05/04 14:57:18
>>401
読んでみます。

>>402
やはりプライベートにして、アクセスを禁止してしまえば良いんでしょうか。

>>403
なるほど。再帰的に呼び出してるわけですよね。
クラスを呼ぶのでクラス指定しないとダメなんですかね。
クラス内だから関数的に呼べるのかなとも思ったんですが。

なんとなくあやふやな感じで理解してましたが。
selfを付けるのと付けないのでどういう違いが
発生するのかいまいちよくわからないのですよね。
selfを付けると、スクリプトの実行時に既に実行可能になってるのか
それとも、クラスが呼ばれたときに実行可能になるのかとか。


>>404
そうですか。あはは。
オブジェクト指向って奥が深いですね。

何か図形的なモデルがあると理解し易いんですが。
きっと複雑な状態遷移があると思うので、
言葉だけではすぐに理解するのは難しいのかなと。


408:デフォルトの名無しさん
08/05/04 15:55:51
説明が漠然としててよく分からんが
Hogeのインスタンスを作っており、なおかつ外部から呼ばれたくないメソッドなら
普通にプライベートメソッドでOK

あとself.bは、クラスメソッドの定義なので
クラスの外でもHoge.bと書けば呼べてしまう
詳しくはリファレンスマニュアル内、「クラスメソッド」の項を参照
URLリンク(www.ruby-lang.org)

409:デフォルトの名無しさん
08/05/04 20:13:44
>>407
すごい大雑把に説明すると、

クラスは鯛焼きプレートでインスタンスは鯛焼き。

def self.foo と定義したものはクラスメソッド。
def bar と定義したものはインスタンスメソッド。

インスタンスメソッドはインスタンスがないと (Hoge.new しないと) 実行できない。
クラスメソッドはクラスが定義されていれば実行できる。インスタンスは不要。

インスタンスメソッドからクラスメソッドを呼ぶのは可能。
def bar
self.class.foo
end

クラスメソッドからインスタンスメソッドを呼ぶには new しないとだめ。

あちこちに self が出てきて分からなくなってきたら p self として確認すればいいんじゃね。

410:デフォルトの名無しさん
08/05/05 15:02:25
PHPのGDに相当するRubyライブラリって何でしょうか?
円や直線など基本的な描画に加えて日本語の出力を行いたいです

URLリンク(d.hatena.ne.jp)
2年前の記事なのですが、現在は何か決定版があるのでしょうか?

411:デフォルトの名無しさん
08/05/05 15:10:40
GDが使いたいならRuby/GD

412:デフォルトの名無しさん
08/05/05 22:40:56
>>408
プライベートで良いんですね。
ありがとうございます。

>>409
なるほど。
selfで呼べば良い訳ですね。

インスタンスメソッドは関数の型宣言みたいなもので、
クラスメソッドは関数みたいな物ですね。

ありがとうございます。

413:デフォルトの名無しさん
08/05/05 23:02:25
あ。違いますね。

インスタンスメソッドは実行時に一つ起動しているオブジェクトで、
スコープの範囲で何時でもどこからでも呼べる。
クラスメソッドは宣言してからようやく使えるメソッドですね。

オブジェクトの起動タイミングが違うという理解でしょうか。


414:デフォルトの名無しさん
08/05/05 23:33:54
>>413
かなり致命的に理解を間違っているようなので
このスレで聞くよりも、身近なプログラマに直接質問してみることを薦める
もしくはGoogleで、オブジェクト指向について基礎から解説してるページを探すとか

415:デフォルトの名無しさん
08/05/05 23:43:24
>>413
1.私は万年筆が好きだ
2.私はこの万年筆が好きだ

この二つのうち、1は万年筆というもの、2は具体的な品を指してるだろ
オブジェクト指向では1がクラス 2がインスタンス
ここで.色関数を考えると、
(2の意味の万年筆).色 ってのは、具体的な品だからちゃんと色が決まってる
これがインスタンスメソッド
(1の意味の万年筆).色 だと、色が決まらないから、クラスに対してインスタンスメソッドは
呼び出せない

同様に、そのものの種類を返す関数 .kind があったとする
このときは、(1の意味の万年筆).kind で、"万年筆"って文字が返ってくるし
(2の意味の万年筆).kind でも、同じように"万年筆"って返ってくる
これがクラスメソッド

416:デフォルトの名無しさん
08/05/06 01:09:00
>>415

> (2の意味の万年筆).kind でも、同じように"万年筆"って返ってくる
> これがクラスメソッド

これは違うんじゃ...

417:デフォルトの名無しさん
08/05/06 01:11:19
比喩でクラスとメソッドの関係を説明しようとするのがそもそも間違いだな

418:デフォルトの名無しさん
08/05/06 12:06:22
つまり、既に初期化されている(スクリプトを読んだ時点で)のがクラスメソッドで、
インスタンスメソッドはnewなどして、その時点にならないと
初期化されないメソッドという事じゃないんですか?


419:デフォルトの名無しさん
08/05/06 12:35:38
Rubyではクラスもオブジェクト。
Rubyではオブジェクト毎にメソッドを定義できる。
クラスオブジェクト(Classクラスのインスタンス)にメソッドを定義したのがクラスメソッド。
そのクラスのインスタンスとは直接は関係しないから、クラスメソッドを定義しても、インスタンスメソッドには影響しない。


420:デフォルトの名無しさん
08/05/06 12:47:26
irb> class C ;def C.clsmtd; p self.object_id; end ;end
irb> C.clsmtd
537963320
irb> p C.object_id
537963320
irb> p C.new.object_id
537887540


421:デフォルトの名無しさん
08/05/06 13:09:22
>>418
どうもインスタンスメソッドに関して、誤解があるように思えるな

foo_instance = Foo.new # オブジェクトの生成
foo_instance.a(1, 2) # foo_instanceのメソッドaを実行し、結果を返す
a(1, 2) # エラー

このスクリプトでなぜエラーが出るのかは理解できる?

422:デフォルトの名無しさん
08/05/06 14:41:55
では、クラスは何処にあるんですかね?
インスタンス化されたクラスは?
場所の定義は無いんですか?


423:デフォルトの名無しさん
08/05/06 15:13:18
Rubyがどうかは知らんが、よく用いられるモデルで説明してみる
class A
@a
@b
@c
end

instance = A.new は、C言語でいえば、void *instance = malloc(3);
この3はAに変数が三つあることに対応してて、このケースならinstance[0] が @a ,instance[2] は@cに対応してる

例えばここにインスタンスメソッドとして
def set_a(new_a)
@a = new_a
end
があったとする。
instance.set_a("test")のように呼び出すと、内部ではset_a(instance,"test")と変換される
実際に呼ばれる関数は、C言語で書けば
void set_a(instance , new_a)
{
instance[0] = new_a;
}

こんな風に、@aなりを使ってると、listのアドレスを確定させなきゃならんから
具体的なインスタンスに対してしか使えない

クラスメソッドは、Cでいうところのグローバル変数のみを使ってる関数で
イメージ的には
int num = 10;
int class_num() { return num; }
に対応する。
この場合は変数instanceをメソッド内で使ってないので、A.class_method でもいいし instance.class_method
でもおk

424:デフォルトの名無しさん
08/05/06 15:16:52
訂正
>line23 listのアドレスを→instanceのアドレスを
>line29 int class_num() ⇒ int class_method()

425:デフォルトの名無しさん
08/05/06 18:26:27
>>422
定義されたクラスは、定数として存在している

class Foo
 (ここにメソッドとかの定義)
end

print Foo.name # "Foo"が出力される
print Foo.class.name # "Class"が出力される

426:デフォルトの名無しさん
08/05/06 18:46:53
Rubyではクラスもインスタンスもオブジェクトで、実体はオブジェクトスペースに存在してるよ。
それらに名前をつけたのが変数や定数。
変数や定数は実体がオブジェクトスペース内のどこにあるのかの情報を持ってる。

427:デフォルトの名無しさん
08/05/06 19:45:36
『プログラミングRuby』にもそんな感じの章があるよ
構造体、メモリ、ポインタで説明してほしい人は
読んでみると何かしら得るものがあると思うんだ

URLリンク(www.ruby-doc.org)

ここの図が良いんだけどFigure not availableになってるのが残念

428:デフォルトの名無しさん
08/05/06 22:05:52
rubyでオブジェクト指向理解しようなんて無理でしょ
遠回りだけどjavaをしっかり勉強した方がいいじゃないの?

429:デフォルトの名無しさん
08/05/06 22:10:44
Javaのオブジェクト指向はオブジェクト指向なJavaでしかないと思うんだ

430:デフォルトの名無しさん
08/05/06 23:32:46
オブジェクト指向を理解するという文脈でJavaを第一に持ってくる
ってことは理解してないってことだよな。


431:デフォルトの名無しさん
08/05/07 00:09:23
ていうか
Rubyのクラスとインスタンスとメソッドを理解したいのか
オブジェクト指向プログラミングのクラスやインスタンスを理解したいのか
どっちかにして欲しい
後者ならスレ違いだ

432:デフォルトの名無しさん
08/05/07 00:55:34
>>430
オブジェクト指向を学ぶ上でJavaより勉強する価値のある言語って何?
批判するだけで自分の考えは何も無いの?

433:デフォルトの名無しさん
08/05/07 00:57:09
Smalltalkあたりじゃないかな。

434:デフォルトの名無しさん
08/05/07 00:57:26
smalltalkじゃね?

435:デフォルトの名無しさん
08/05/07 00:57:55
有名なのはSmalltalkかな

436:デフォルトの名無しさん
08/05/07 00:59:01
Smalltalkだろ。


437:デフォルトの名無しさん
08/05/07 00:59:26
Smalltalkだな

438:デフォルトの名無しさん
08/05/07 01:00:25
smalltalkがjavaより勝ってるものって何?

439:デフォルトの名無しさん
08/05/07 01:05:34
純粋さ

440:デフォルトの名無しさん
08/05/07 01:06:56
おっと無能の数はjavaには敵いませんな

441:デフォルトの名無しさん
08/05/07 01:06:57
2chは知ったかばかり

442:デフォルトの名無しさん
08/05/07 01:11:16
オブジェクト指向の学習用として考えるなら、だいたいどれも大差ない
C++でもRubyでもPythonでもJavaでも
(smalltalkは使ったことないから知らないが)

443:デフォルトの名無しさん
08/05/07 01:11:46
>>438
というかJavaは、意図的に完全なオブジェクト指向にしてない
実用面ではどうかってなるとまた別の話になるんだが、
少なくともオブジェクト指向って観点から見ると美しくない

逆にSmalltalkは文字通り全部がオブジェクト
制御構造すらオブジェクトのメッセージ扱いになる
RubyもSmalltalkからメタクラスとかの概念をもらってるはず

444:デフォルトの名無しさん
08/05/07 01:12:09
smalltalkがjavaより勝ってるものって何ですか〜?

445:デフォルトの名無しさん
08/05/07 01:15:03
じゃあどうしてデザインパターンの書籍の多く(専門書も含めて)はJavaを元に書かれてるんだ?

446:デフォルトの名無しさん
08/05/07 01:16:28
JavaはOO貫徹をあきらめてAlgol系並の実用性を手に入れたようなもんだからな。


447:デフォルトの名無しさん
08/05/07 01:17:39
>>445
最初のGoFはSmalltalkだったぞ。
のちにJava優勢になったのは普及度の違い。


448:デフォルトの名無しさん
08/05/07 01:18:33
>>445
オブジェクト指向をよりよく体現してる=言語として人気がある とはならないだろ
どっちにしろJavaで上手い設計してる奴はSmalltalkから来てるよ

449:デフォルトの名無しさん
08/05/07 01:20:16
Javaスレッドで前にも見たような流れだな
少なくとも実用的な言語を元に学ぶのが良し、という考え方の元ではJavaだろう
Smalltalkでオブジェクト指向を学べってのは大げさ過ぎる

450:デフォルトの名無しさん
08/05/07 01:20:46
>>445
実用を兼ねてるんだろう
Java使ってる人は多いだろうし、JavaはC++やC#とかとも文法が似てる

・・・・・と言いつつ、GoFのデザパタ本はSmalltalkも使ってたような

451:デフォルトの名無しさん
08/05/07 01:21:40
smalltalkってそんなに完成された言語だったの??

452:デフォルトの名無しさん
08/05/07 01:22:22
つかなんでいきなりデザインパターンみたいな応用が出てくるんだ
もともとの問題を摩り替えないほうがよい

453:デフォルトの名無しさん
08/05/07 01:25:46
Javaで学べっていっても初心者的には構文覚えて精一杯じゃないか
自分でいい設計してるソース探してきて読むとこまで勉強するよりは
Smalltalkのライブラリでも読んでりゃいいとは思う

454:デフォルトの名無しさん
08/05/07 01:26:16
GoF本は最初のバージョンはSmalltalkとC++でサンプルが書かれてる。
もともとSmalltalkで得られた知見だしな。

新しい版はJavaコードも使ってる。


455:デフォルトの名無しさん
08/05/07 01:27:35
>もともとの問題を摩り替えないほうがよい
Smalltalkに噛み付く奴はスレ逸らしだろうな

456:デフォルトの名無しさん
08/05/07 01:27:46
OOを覚えるためにはやはりEiffelしかないだろ

457:デフォルトの名無しさん
08/05/07 02:00:12
Eiffelもやっとくべきだと思いつつまだ入門もしてないだよなー。



458:デフォルトの名無しさん
08/05/07 06:09:55
なんというか>>400読んで、
ちょっと前に本スレにいた京大君を思い出すんだよな(本人だと言うわけではなく)。
んで、実際のところ質問者はCとかでは、コードをすらすら書けるんだが、
「オブジェクト指向」(または、Rubyのモデル)の概念でつまづいてコードが書けないのか。
それとも計算機の理論を一通り座学して、これからコードを書くに当たって、
(Cではなく)楽ちんそうなオブジェクト指向スクリプト言語を選んだのか。
前者と後者で、かなりすべき対応が変わると思うんだが。

459:デフォルトの名無しさん
08/05/07 07:26:35
Javaは非オブジェクトな型をあえて残した言語だからな
OOPLとしては、普及してるが純粋でない。

460:デフォルトの名無しさん
08/05/07 10:24:48
Smalltalk が Java や Ruby より圧倒的に勝っているところをひとつ挙げるとすれば
リフレクションとかに代表されるイントロスペクション機能でしょうね。
分かりやすいところでは、IDE やデバッガなどの機能充実度や、それらの
作りこみやすさに出てくる特徴です。もとは LISP 譲りの機能ですが、Smalltalk での
充実度は LISP をも凌駕しています。これは Smalltalk 処理系が Smalltalk 自身で
記述されている(記述可能…とかではなく、実際にそれで運用されている)ことに
由来します。

Ruby 実装では Rubinius や今度の RailsConf でデモされる予定の MagLev が、
現在の制約を克服して Smalltalk に近づこうと努めているみたいです。
これらは Smalltalk と同じく、Ruby 処理系をできるだけ Ruby で記述しようとする
ものたちです。

あと余談ですが Java は、Ruby や Smalltalk などの「メッセージングのOO」という
パラダイムに則していないだけで、C++ や Eiffel などの「ユーザー定義型のOO」と
いうパラダイム的にはかなり純粋なほうですよ。念のため、後者は“ユーザー定義型”を
クラスで実現しようとする考え方で、メッセージのやりとりとかとは無関係です。

裏を返せば、Ruby や Smalltalk は、Java の土俵である「ユーザー定義型のOO」的な
切り口で見たときに、足りないところが多々あるということになり、実際にそうなっています。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4706日前に更新/261 KB
担当:undef