[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 23:56 / Filesize : 233 KB / Number-of Response : 880
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Ruby 初心者スレッド Part 33



1 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 14:21:25 ]
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。

★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
   (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。)
 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。

関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・モジュール名やエラーメッセージでググる
 ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/
 ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(自力で訳さずなるべくそのままで)
 ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。

331 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:35:34 ]
$ rvm use system
<i> Now using system ruby. </i>
$ irb --prompt simple
>> RUBY_DESCRIPTION
=> "ruby 1.8.7 (2008-08-11 patchlevel 72) [universal-darwin10.0]"
>> h = Hash.new([])
=> {}
>> [h.default, h[0], h[1]].map(&:object_id)
=> [2156963800, 2156963800, 2156963800]

$ rvm use 1.9.1-head
<i> Now using ruby 1.9.1 head </i>
$ irb --prompt simple
>> RUBY_DESCRIPTION
=> "ruby 1.9.2dev (2009-12-11 trunk 26067) [x86_64-darwin10.2.0]"
ruby-1.9.1-head > h = Hash.new([])
=> {}
>> [h.default, h[0], h[1]].map(&:object_id)
=> [2151892720, 2151892720, 2151892720]


332 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:45:53 ]
>>331みたいな人ってソース中のコメントもほぼかかなそうだよな

333 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:35:24 ]
>>332は初心者

334 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:59:49 ]
まあ初心者スレだしな

335 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 17:53:52 ]
結局>>328は間違ってるということかい?

336 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 18:26:49 ]
new(初期値)で生成されたハッシュに存在しないキーでアクセスした場合の挙動は、
同じオブジェクトが返るというのが正しく、
毎回異なるオブジェクトが返るというのは誤り。


337 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 18:37:34 ]
質問するならリファレンスマニュアルくらい読んでからこい

338 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 18:47:27 ]
初心者スレ的には
「マニュアルのここ読めわかりやすくて疑問の余地無し氏ね」
と言える環境を揃えるほうが先な気もする

339 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 23:53:39 ]
>>328
それは初期値じゃなくて初期ブロックじゃないのか?

h = Hash.new{|hash,key| [] }
p h[2].object_id == h[2].object_id # => false

未設定のキーを指定された時に、そのつどブロックを実行した結果を返す
よって同じキーでも毎回違うArrayが帰ってくる




340 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:14:37 ]
>>338
ようやくたどり着いたと思ったら、

xxxx()
執筆者を募集中

おい、コードを書いたのはどこに行ったの?
採用した人は?

なので、動かないものは、自分で書き直すことにしてる。
一から一人でするより、ちょっと近道。

341 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 05:46:41 ]
>>337
>質問するならリファレンスマニュアルくらい読んでからこい
おまえは書き込むまえに>>1を読んでこい

342 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:50:04 ]
>>341
おまえは書き込むまえに>>1を読んでこい

343 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:39:01 ]
そんなことより俺のIDを見てくれ。どう思う?

344 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 09:13:46 ]
見えない

345 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 10:15:45 ]
>>344はバカ

346 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 10:27:17 ]
まあバカスレだしな

347 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:45:29 ]
教えてください
Hpricotで日本語テキストのリンク検索が上手く動きません
どうすればNokogiriと同じ動きになるのでしょうか

#!ruby -Ku
require 'hpricot'
require 'nokogiri'

html = "<html><a>りんく1</a><a>りんく2</a><a>りんく3</a></html>"
doc = Hpricot(html)
print doc.at("a[text()*='りんく2']"); # エラー発生

doc = Nokogiri(html)
print doc.at("a[text()*='りんく2']"); # こちらは正しく動く

エラー内容
/usr/local/lib/ruby/gems/1.9.1/gems/hpricot-0.8.2/lib/hpricot/elements.rb:486:in `index':
incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)



348 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:48:10 ]
>>347
初心者は Ruby1.9 使うなってこれだけ言われてるのになんでわからんのだエラー

349 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:54:16 ]
>>348が FA なのだが

というか何もわからず動かしていることが原因で、
Nokogiri が動いたのはただの偶然に過ぎない
むしろ「Nokogiri が動いたのは何故ですか」という質問になるべき事象

無理しないで Ruby 1.8.7 使え
1.8.7 を理解したあとで差分学習で 1.9.1 を習得するのが一番早い



350 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:57:10 ]
了承、1.8.7にする

351 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:59:15 ]
hpricotはコンパイルが通る程度に1.9対応されてるだけ。
作者の _why the lucky stiff はネット上から失踪しているので、事実上塩漬け状態。


352 名前:デフォルトの名無しさん [2009/12/20(日) 16:02:52 ]
質問
rdoc が生成する HTML について、特定の要素(例えば <pre>タグ)のスタイルだけ
いじりたいという場合はどうしたらいいのでしょうか?

353 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:27:02 ]
>>352
ちょっと見た感じでは rdoc に --template オプションで
自作のテンプレートを指定してやればいいんじゃまいか

既存のテンプレが rdoc/genarators/template/html に入ってるから
それを部分的に書き換えて使えばよさそう

354 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:17:36 ]
whyさん死んじゃったからNokogiri推奨だと思うけど、
>>347がhpricot使いたいと思った理由はなんだろ

355 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:20:40 ]
え、whyって死んじゃったの?
もしそうならHpricotきめえとかdisるのやめて冥福を祈る

356 名前:352 mailto:sage [2009/12/20(日) 19:31:28 ]
>>353
ありがとうございます。
ベースになるテンプレートを選んで、それに改変を加えたものを使おうと思います。

357 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:19:30 ]
ネットワーク的に、ね。
自分できれいさっぱり痕跡を消していった。


358 名前:352 mailto:sage [2009/12/21(月) 15:57:51 ]
追記
rdoc の --style オプションにスタイルシートのパスを渡すことで
HTML生成時に自前のスタイルシートを読み込ませることができました。

テンプレから CSS の部分だけ切り出して編集して、
rdoc --style=path_to/hoge.css

でうまくいきました。
というか、manページに普通に書いてあったorz

359 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:18:49 ]
hpricot でも nokogiri でもいいんですが、

doc = Hpricot(open(uri).read)
(doc/:a).each do | link |
 if link[:href] == '#'
  p "設定し忘れ => #{link[:lineno]}"
 end
end

みたいに、行番号を取得することって出来ませんか?



360 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:21:13 ]
行番号というメタ情報があれば取得できるよ
ないならできない
自分で行番号だと思うものを作って数えるしかない

361 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:38:58 ]
>>359
その程度なら普通に正規表現でよさそうだね。

File.open(filename) do |f|
 i = 0
 f.each_line do |line|
  i += 1
  puts "#{filename}:#{i}: 設定し忘れ" if /href=("¥#"|'¥#¥')/
 end
end

362 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:39:08 ]
jrubyでmechanize使えている人います?hpricotのjava版使うしかないんでしょうか?

363 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:45:49 ]
>>361みたいに例示依存の回答する人なんなの

364 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:39:36 ]
>>361 欲しいのは行番号であって、例文なんかどうでもいいんだが

365 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:00:20 ]
例題コードを添削するのはどうかとw

366 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:10:57 ]
作業ディレクトリの変更って出来ませんか?
./data/a.rb
./data/1.txt
./main.rb
ってあったときに
main.rbからa.rbをrequireするんですけど
a.rbは
open("1.txt","r") これで読めるようにしたいです

367 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:21:49 ]
save = Dir.pwd
Dir.chdir "./data"
# 作業
Dir.chdir save
とかかな

同じディレクトリにあるファイルを使うってことなら
open(File.dirname(__FILE__)+"/1.txt")
でもいいかも

368 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:34:12 ]
Pythonのdirみたいに、あるオブジェクトが持ってるメソッドと変数を一覧するものってありますか?

369 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:36:29 ]
>>367
それでいけそうです
ありがとうございます



370 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:37:30 ]
puts Object.methods

ソートするとなおみやすい
puts Object.methods.sort

371 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:41:30 ]
Object#methods
Object#instance_variables

372 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:00:57 ]
>>370-371 ありがとうございます!
これが欲しかった。

373 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:36:02 ]
>>359
Nokogiriの要素は #line メソッドがあるはず。


374 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 14:41:59 ]
>>367
Dir.chdir "./data" do
# 作業
end

でもいけるよ。

375 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 14:46:45 ]
>>374
おお知らなかった
もっかいリファレンス見直すことにしよう

376 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 10:27:52 ]
ねー、

hoge/lib/  ← 自作ライブラリの rb ファイル
hoge/test/ ← lib のファイルに対応するテストスクリプト

という一般的なディレクトリ構成で test/test_hoge.rb を実行する場合、どうするのが「ふつう」なんだ?

:~/hoge$ ruby test/test_hoge.rb

:~/hoge/test$ ruby test_hoge.rb

:~/hoge$ testrb test/test_hoge.rb

:~/hoge/test$ testrb test_hoge.rb

377 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:29:21 ]
コマンド直叩きするときは ruby -Ilib test/test_xxx.rb とする気がするが、
普段はrakeのTestTask任せだから、どうやってるか意識してないわ。

TestTaskの中をみてみたけど、testrbを使うことも使わないことも可能みたい。
(デフォルトはrakeのライブラリ内の機能を使う)

なお、rakeの場合、test/ の中で起動しても、ディレクトリを遡ってRakefileを
探して、見つかったディレクトリで動くので、hoge/Rakefileとして置いている
場合は、実質的には hoge直下でやってることになるはず。


378 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:52:34 ]
ruby test/test_hoge.rb とかやりたいなあ
テストするためだけに test/ に降りてしまうのは、どうも…

379 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:54:14 ]
そのへんは、helper.rb をどうやって読むかの一点にかかってる気がしてならない



380 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 11:55:55 ]
ファイルいっこテストするだけなのにrakeはないわー

381 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 12:04:42 ]
rake test TEST=test/test_hoge.rb でファイル一個か。

382 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:39:33 ]
テスト実行するのにコマンド売ってるのかよ。
autotestでファイル保存と同時に自動でテスト実行だろJK

383 名前:362 mailto:sage [2009/12/23(水) 13:40:52 ]
JRuby 1.4でNokogiri対応になったみたいですね。失礼しました。

384 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:22 ]
>>382
テストが通らないタイミングでファイルを保存したりしないの?
というか編集途中で保存し辛くなりじゃん

385 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:54:01 ]
なるじゃん

386 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 14:12:02 ]
ファイルいっこのテスト方法がないわけじゃなかろう
autotestを使うかどうかとはまた別の議論だと思う

387 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:17:10 ]
>>382
コードを保存したいタイミングと、テストを走らせたいタイミングは別じゃね?
エディタからテストを実行させられればそれでいいけどなあ。
わざわざ保存したときに勝手にテストが走ってほしくないよ。

388 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:03:22 ]
かりに毎回毎回コマンドラインからテストするとしても
シェルの履歴ぐらい使うだろう。


389 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:27:27 ]
秀丸とかサクラエディタとか外部コマンドを
実行できるテキストエディタを使うがよろし。
俺はVim使ってるけど。



390 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:36:19 ]
俺はタブ機能付きの端末エミュレータ使って
右端のタブをテスト用に使ってる
タブ切り替えにキーを割り当ててやるとかなり快適だ

同じ用途で GNU Screen とか使ってる人もいるのでは?

391 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 19:41:16 ]
auto-save-buffersつかってるとautotestは使えない

392 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 21:51:25 ]
>>387
そうかー、その品は人それぞれだな。

autotest連携で結果をSnarl(今ならGrawlか?)で通知出したり、サウンド出したりしてるけど
けっこう快適よ?
ただ、coLinuxで動かすとその辺の連携がしにくくて困る

さらに、AutoHotKeyで保存キー入力と同時にブラウザリロードとかもやってる。

393 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 01:40:48 ]
自動保存+すきあらば無意識で手動保存してるから、
保存とか意識したことがないなー。


394 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:39:55 ]
warning: Insecure world writable dir /home in PATH, mode 040777
という警告がでて困ってます。
この警告だけを出さないようにする方法があれば教えてください。

home のパーミッションが 777 なのがおかしい!といわれればそうなんですけど、
下請けにはそんなことすら変更する権限がないんです。



395 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 09:47:09 ]
>>394
知らんよ
RailsはRailsスレで

396 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 10:47:41 ]
>>394
環境を詳しく

もしRailsなら権限くれっていえ。まともに開発できんから

397 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:31:38 ]
>>394
ENV['PATH']から /home を抜け。


398 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:33:56 ]
ENV['PATH']つーか、rubyを実行する前だからシェルの環境変数PATHね。


399 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:52:12 ]
>>395
なぜRails?

>>396
環境はlinux 2.6.9-89.EL, ruby 1.8.7-p174です

>>397
$PATHには/homeがないけど、/home/username/binがあります。
これを除くことはできないので、どうしたもんか困ってます。





400 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:28:44 ]
フルパスで実行するようにすれば除けるんじゃないの?


401 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:32:16 ]
あくまでrubyに伝わるPATHだけ変わればいいので、

* コマンドの環境だけ変える。
PATH=/usr/bin:/bin(などなど) ruby 引数
とか

* 一度変えて戻す
OLD_PATH=$PATH
PATH=/usr/bin:/bin(などなど)
ruby 引数
PATH=$OLD_PATH
とか

* サブシェル内で変える
(
PATH=....
ruby
)

とかでもいい。


402 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:39:54 ]
RubyGemsで依存関係を調べる方法ないですか?
gem dependency を使ってみているんですがうまくいきません。

$ gem dependency mechanize -v "0.9.3" --remote
Gem mechanize-0.9.3
nokogiri (>= 1.2.1, runtime)
hoe (>= 1.12.2, development)

$ gem dependency mechanize -v "0.9.0" --remote
No gems found matching mechanize (= 0.9.0)

$ gem dependency mechanize -v "<0.9.0" --remote
Gem mechanized_session-0.0.2
mechanize (>= 0.9.3, runtime)
hoe (>= 2.3.3, development)

何がやりたいかというとmechanizeでnokogiri非依存のバージョンを探したいのです。

403 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:56:21 ]
>>402
WWW::Mechanize.html_parser = Hpricot

404 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:04:10 ]
>>402
libxml2 に依存したくないというのなら>>403
Nokogiri のインストール自体を dependency 経由で行って欲しくないというのなら、Mechanize 0.8.4 かそれ以前が必要

405 名前:402 mailto:sage [2009/12/24(木) 17:13:20 ]
即レスありがとうございます。

>>403
あー、いや、Bundlerで利用しようとしておりまして、
実行環境ではNokogiriが動かないため依存段階そのものから外したいのです。

# 実際はappengine-jrubyでmechanizeを使いたいという難儀なアレなのです
# jruby版Nokogiriはffi依存のせいでappengineでは動かんのですわ・・・
appengine-jruby - Project Hosting on Google Code
code.google.com/p/appengine-jruby/

>>404
ありがたい
0.8.4ですね、試してみます。

後学のために聞きたいのですが、こういうのってどうやって調べられるもんなんでしょうか?
以前はgemコマンドでgemのパッケージ時の設定を見る方法があったような気がしたのですが、どこいったんでしょう?

406 名前:402 mailto:sage [2009/12/24(木) 17:16:34 ]
>>405 の前半の説明が足りないので補足。
mechanize 0.9.3では >>403したいところなんですが、
require 'mechanize'
するだけでffiねーぞゴラァ(appengine版のjrubyでは含まれてないためらしいです。pure java版Nokogiriが望まれます)
のエラーがでてしまうのです。

407 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:20:09 ]
>>405
何もしてない
賞味3分の力技
add_dependency から Nokogiri が消えるまで mechanize.gemspec の github 履歴を直接調べて遡った

408 名前:デフォルトの名無しさん [2009/12/24(木) 18:55:35 ]
参考までに聞きたいのですが、
長くなり過ぎたメソッドチェーンの途中に改行を入れる場合、
皆さんはどこで改行するのが適切だと思いますか?

1) ピリオドの後に \
value = this.is.a.\
very.long.method.chain

2) ピリオドの前に \
value = this.is.a\
.very.long.method.chain

3) そもそも途中で改行しない

value = this.is.a
value = value.very.long.method.chain


409 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:03:30 ]
>>408
長くなりすぎたと感じる時点で「よくないコードの匂い」なので、リファクタリング開始



410 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:13:53 ]
>>408
メソッドチェーンでは改行は入れない
今更80文字制限などとは言わないが、メソッドチェーンで長い場合は途中変数で分ける
該当するとすれば3

411 名前:408 mailto:sage [2009/12/24(木) 19:16:52 ]
>>409
長くなり過ぎた場合という表現にちょっと語弊があったかも知れません。
実際にはメソッドのブロック付き呼び出しが2〜3続くような場合で
どうしても1行には収まらない場合、です。例をあげると

files = Dir.glob("**/*.rb").select {|file| ... }.reject {|file| ... }.map {|file| ... }

のようなパターンです。


412 名前:402 mailto:sage [2009/12/24(木) 19:18:31 ]
>>407
ΩΩΩな、なんだってー。恐れ入りました。そんな手がw

gem dependencyやgem specコマンドは--remoteのときには最新版からしかとれないんですね。
一旦gemをインスコしたらOK見られるようですが・・・

413 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:19:43 ]
>>408 >>411
files = Dir.glob("**/*.rb").select {|file| ... }.
    reject {|file| ... }.map {|file| ... }

って俺はやってるな

414 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:20:46 ]
>>410
> メソッドチェーンでは改行は入れない

>>411 であげたようなパターンでもそうなのですか?
自分はああいうパターンだとピリオドの後で改行しちゃうのですが、
一般的には推奨されない(マナーの悪い)書き方なのでしょうか


415 名前:408 mailto:sage [2009/12/24(木) 19:24:34 ]
>>413
ピリオドの後は \ なくてもいいんですよね。
自分の場合意図的な改行であることを明示するために \ を付けてます。

というか、>>411 の例は最後の map が意味的におかしいですね、しまったorz

416 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:29:58 ]
files = Dir.glob("**/*.rb").select{|file|
      ...
    }.reject{|file|
      ...
    }.map{|file|
      ...
    }

417 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 21:32:51 ]
ワンライナー書いてるならともかく、どっかで区切れよと
なぜそんなにつなぎまくるのかと

418 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 22:41:13 ]
>>417
自分の場合はつなぐというより、
つながっていくという感じでついつい長くなってしまうw
返値を無駄にしたくないというか

変数の名前を processed_values とかにした場合も名前に引きずられて
途中の状態を入れたくないという雑念が生じ、無理してでも一連のチェーンで書いちゃう


419 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:09:13 ]
Ping打ちたいんだけどどう書くの?



420 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:25:21 ]
>>419
ttp://www.sakalab.net/prog-ruby/ruby-man-html-20080121/ping.html

421 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:35:21 ]
俺もそれ出そうかと思ったけど、ICMP使わないんだよな

422 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:38:51 ]
わかりやすくていいじゃん

423 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 05:59:43 ]
files = Dir.glob("**/*.rb")
files.reject! {|file| ... }
files.map! {|file| ... }

424 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:08:05 ]
>>423みたいに例示依存の回答する人なんなの

425 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:21:57 ]
実際には存在しないメソッドを使って質問したほうがいいな

426 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 09:54:59 ]
別にいいんじゃない?
破壊的メソッドが使える状況なのに気づかなかった初心者がいてもおかしくないし
役に立たないならスルーすればいい
回答者にエスパーを要求するっていうのはそういうことだと思う

427 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:03:27 ]
1.9 だと メソッドのピリオド前でも改行できるようになった
複数行のメソッドチェーンのピリオド位置をそろえられるらしい

if とか class とか直後に識別子や式が必須のところは改行しても行が継続するとか
そういう行継続のルールってマニュアルあるの?


428 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:16:41 ]
従来のルール
「改行までの箇所を読んで完結していると見なされる(パースできる)ことがないなら改行OK」
に追加されたのは「メソッド呼び出しのピリオドの前もOK」だけのはず。



429 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:18:40 ]
あれ、>>428 のルールだけでは
class Hoge
で改行が許されるのは説明できないのか。




430 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 15:44:18 ]
>>429
ん? 説明できてるように思うけど
class Hoge って end で閉じるまで完結しないでしょ

431 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:16:30 ]
1.8.7p174

puts 1+
2
これは3と出る。+がまだ完結していないから2までがまとまって解釈される。

puts(1+
+2)
同じく3。

puts 1
+2
これは1までで完結しているから1と出て、+2は単項演算して捨てられる。

puts(1
+2)
これは unexpected tINTEGER, expecting ')'
次の行まで見て完結させてくれないのはどうして?









[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<233KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef