- 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を読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
- 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 ')' 次の行まで見て完結させてくれないのはどうして?
- 432 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:22:47 ]
- パーサをそんなにいじめるなよ
- 433 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:57:33 ]
- >>431
パーサには puts (1 2) と見えてる(+ は単項演算子と解釈されてる) puts (1 + 2) だといけるかなと思ったが syntax error, unexpected '+', expecting ')' だった ruby 1.8.7 (2009-06-12 patchlevel 174) [i486-linux]
- 434 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:49:28 ]
- > puts 1
> +2 > これは1までで完結しているから1と出て、+2は単項演算して捨てられる。 ↑ここまできたら > puts(1 > +2) これは駄目ってわかりそうなもんだろw
- 435 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:00:39 ]
- >>434
kwsk
- 436 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:05:56 ]
- puts(1\
+2)
- 437 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:08:58 ]
- >>434
どうして? >>436 解決法を求めてるわけじゃないぜ。
- 438 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:30:44 ]
- ()の構文は(式)。
(1 と書くと1は完結した式と解釈され、次の行には残りの)しか書けない ってことでok?
- 439 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:42:13 ]
- ずいぶんしみったれてるな。
'('が出て来たら')'の直前までを式と解釈してくれても良さそうなもんだが
- 440 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:15:20 ]
- Rubyのパーサは(人間にすると)曖昧な解釈だからなw
>>437 puts 1 +2 が駄目なので、演算子を行末におかない場合は次行と連結されないため、式として認識しない、までは認識できるだろう。 なので、次の puts (1 の時点で次行とは連結されないでその行までで解釈される、と考えられるので、 閉じ括弧がその行にないのでエラーとなる、と そういうふうに頭がさっと回らない、ということならばあなたがRubyに慣れていないか、 もしくは俺が長い行を複数行に分割するのに慣れすぎているのでそう感じてしまうだけかw
- 441 名前:デフォルトの名無しさん [2009/12/25(金) 21:24:09 ]
- puts((3
+ 4)) # => 4 とかRubyって面白いね
- 442 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:29:45 ]
- もろくも崩れ去った俺(=>>438)の推理orz
>>441はどういうことなの?
- 443 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:42:32 ]
- えっ?
ここ初心者スレなんですけど
- 444 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:05:02 ]
- >>443
初心者にも有益な話題じゃない? 式が完結してしまうところで不用意に改行して構文エラーも出なくて なんでうまく動かないんだみたいな落とし穴を回避するにはこういう知識も必要
- 445 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:06:30 ]
- バッドノウハウに近いと思う
改行が有効な個々の場合を記憶する理由はない
- 446 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:08:31 ]
- 初心者は構文解析何それおいしいのだし
妙なところで改行打つような真似もしないだろう
- 447 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:12:13 ]
- 結論 とても長い式文でもない限り途中で改行すると見づらいし誤作動の原因になりかねないからやめれ。
- 448 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 23:14:12 ]
- メソッドチェーンはとても長い式文に入りますか?
|

|