• ベストアンサー

Rubyのprettyprintについて

Ruby2.1.3を使って楽しいRuby第4版を学習しているんですが ppメソッドでp.56のListの例題のとおりv = [{key00:"「楽しいRuby第4版」", key01:"「Rubyレシピブック」", key03:"「rails3レシピブック」"}]を出力しても、適度に改行してくれません。 出力結果はpメソッドと同じく横に羅列されてでてきます。 何がいけないんでしょうか?

noname#208914
noname#208914
  • Ruby
  • 回答数1
  • ありがとう数10

質問者が選んだベストアンサー

  • ベストアンサー
  • siffon9
  • ベストアンサー率64% (136/211)
回答No.1

こんにちは 私の環境(2.0.0)でも同じ結果になりました。 pメソッドで表示される文字数がある指定文字数を超えないと改行してくれない様ですね。 マニュアルによると指定文字数は79文字で、ご質問記載のp vの文字数は76文字なので、もとの文字に4文字を追加するか puts PP.pp(v, '', width = 75) の様に指定文字数を少なく設定すると改行してくれる様になります。

参考URL:
http://docs.ruby-lang.org/ja/2.1.0/class/PP.html
noname#208914
質問者

お礼

ありがとうございました。 謎がとけました。

関連するQ&A

  • rubyのObject#methodsについて

    こんにちは、 rubyのmethodsメソッドについてです。 met = Object.method(:method) として、ObjectクラスのmethodメソッドをMethodインスタンスとしたとき met.parametes #=> [[:ref]] とすると、引数の情報を得ることができます。 しかし、 met.methods には、「:parameters」がありません。 クラスごとのメソッドを全て表示させたいのですが、 methodsはすべてのメンバを取り出すメソッドではないのでしょうか。 ご存知の方がいらっしゃいましたらお教えくださいませ。 ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] Rails 3.1.4 gem 1.8.17 CentOS 5.7

    • ベストアンサー
    • Ruby
  • rails(主にpassenger)を使う場合のデバッグ

    Rails初心者です。 Railsでアプリケーションを構築する場合、何か良い方法はありますか? たとえば、アクション内でオブジェクトの中身などをみたくて p myObjや pp myObj などということをしても、テンプレートに遷移して出力されません。(pの後にexitをしても、exit専用画面?になって、結局出力がみれず) ruby-debugというものがあるようなのですが、passengerを使った場合は動作しないようでした。 何か良い方法があれば教えてください。よろしくおねがいします。

    • ベストアンサー
    • Ruby
  • ruby on railsでフォームに1種類の入力項目を複数作成する方法

    プログラミングの初心者で現在ruby on railsを勉強しています。 その中で複数のエントリーを一括で登録できるようにするサンプルを 探し、railsレシピブック183の技の中にある recipe-101「フォームに1種類の入力項目を複数作成する」 を見つけたのですが、あまり理解できず、うまくいきませんでした。 そこでお願いしたいのですが、 初心者でもわかりやすいサンプルなどが掲載されてる本や ホームページがありましたら教えていただきたいです。 よろしくお願いします。

  • Ruby on rails チュートリアル選択

    Ruby on Rails 日本語版 のチュートリアルを4.xバージョンで始めたのですが、 5章に差し掛かるあたりで5.0バージョンの日本語版が登場しました。 web業界へ転職するための学習目的なのですが、 現行の4バージョンを続けるべきでしょうか? 5.0バージョンを最初からやり直すべきでしょうか? よろしくお願いします。

  • CentOS5でruby1.8とrails2、SQlite3のインスト

    CentOS5でruby1.8とrails2、SQlite3のインストール。 環境がCentOS5.5、ruby1.8.7-p302、SQlite3系で下記のサイトにあるようなRubyプログラミングを考えている者です。 http://www.db.is.kyushu-u.ac.jp/rinkou/libpcap/rubypacketdb.html 今回は、http://www.gfd-dennou.org/arch/davis/gfdnavi/doc/install/install-ru... を参考にしながら環境を作っていましたが、rubygem1.3.7でsetupを行うと、勝手にrailsの最新版をインストールされてしまいます。(なぜか強制的に3.0.0へ) どの段階でどうコマンドを打てば、railsの古いバージョン(例えば2.3.5)をインストール出来るのでしょうか? また、http://www.db.is.kyushu-u.ac.jp/rinkou/ruby/rubyinstalllinux.html を参考にしてSQlite3をgemでインストールしようとしたところ、「ruby1.9.1にヴァージョンをあげて」を怒られました。 ググってみたら、ruby1.8.7でもsqlite3は導入できるそうなので納得いきません。 なにか解決法はないでしょうか? 長くなりすいませんでした。どうかお願い致します。

  • ハッシュ(単語数を数える) たのしいRuby

    たのしいRuby P252に掲載されていた、例題 「ハッシュ(単語数を数える)」の解説を読んでも 意味が分からなかったので教えてください。 ■例題word_count.rb 1:# 単語数のカウント 2: 3: count = Hash.new(0) 4: 5:## 単語の集計 6:while line = gets 7: words = line.split 8: words.each{|word| 9: count[word] += 1 10: } 11:end 12: 13:## 結果の出力 14:count.sort{|a,b| 15: a[1] <=> b[1] 16:}.each{|key, value| 17: print "#{key}: #{value}\n" 18} ■疑問1. 解説には、 # 3行目で出現回数を記録するハッシュcountを作ります。 # countは、キーが単語、値がその単語が出現した回数を表します。 と書かれているのですが、「キーが単語、値がその単語が出現した回数を表します」 の内容が理解できません。newしただけなのに、どうして、 キーと値の内容が決まるのでしょうか? ■疑問2. 解説には、 # 8行目からの繰り返しでは、それぞれの単語をキーにして、countから出現回数を取り出し、 # +1します。 と書かれているのですが、「count[word] += 1」 の内容が理解できません。 作成したハッシュcountと、getsメソッドで読み込み単語単位に分割した配列wordsとが、 どこで関連付けされているのかが、分かりません。 ■疑問3. 解説には、 # ruby word_count.rb README という形で、Rubyに同梱されているREADMEファイルの単語数を調べた 実行結果が掲載されているのですが、 そのときの具体的な処理の流れが分かりません。 「ruby word_count.rb README」と書くだけで、 処理の流れが、getsの所まできたとき、 自動的に指定ファイル名を判断し、 読み込みを始めるということなのでしょうか。

    • ベストアンサー
    • Ruby
  • Ruby on Rails について

    Ruby on Railsでアプリケーションを作ります。 バージョンは:InstantRails-2.0-win 1、データベース表の作成: データベース名:myapp   テーブル名:peoples データベースを作成したら、MySQLを再起動します。 2、新規アプリケーションの作成: アプリケーション名:myapp Instant RailsウィンドウのIボタン⇒Rails Applications⇒Manage Rails Applicationsをクリックします。 Rails ApplicationsダイアログボックスのCreate New Rails App・・をクリックします。 コマンドプロンプト画面が表示されます。 rails myapp を入力します。 コマンドプロンプトのプロンプトが入力状態になって、コマンドプロンプトを閉じます。 Rails ApplicationsダイアログボックスのRefresh Listボタンをクリックしたら、myappアプリケーション名が追加されます。 3、アプリケーション・モデルの作成: InstantRails-2.0-winフォルダ ⇒ rails_apps ⇒ myapp ⇒ config ⇒ datebase.yml ファイルを開きます。 ↓に書き換えます。 development: adapter: mysql database: myapp timeout: 5000 username: root host: localhost   Instant RailsウィンドウのIボタン ⇒ Rails Applications ⇒ Open Ruby Console Windowをクリックします。 コマンドプロンプトが開きます。 cd myapp ruby script/generate model people を入力します。 4、コントローラの作成: コマンドプロンプトを開きます。 cd myapp ruby script/generate controller people を入力します。 コマンドプロンプトを閉じます。 InstantRails-2.0-winフォルダ ⇒ rails_apps ⇒ myapp ⇒ app ⇒ controllers ⇒ people_controller.rb ファイルを開きます。 class PeopleController<Application Controller scaffold :people ←←追加した行です。 end 5、新しいアプリケーションを起動 Rails ApplicationsダイアログボックスのRails Applications 欄の myappの所をチェックし、Start with Mongrelボタンをクリックします。 コマンドプロンプト画面が起動し、ポート番号が表示されます。 Webブラウザを起動し、アドレス欄に 一つは: 「http://localhost:people/list」を入力し、Enterキーを押します。 ↓Errorメッセージが表示されました。 NoMethodError in PeopleController#list undefined method `scaffold' for PeopleController:Class RAILS_ROOT: C:/taiyo/INSTAN~1.0-W/rails_apps/myapp   一つは: http://localhost:3000/people Enterキーを押します。 ↓Errorメッセージが表示されました。 NoMethodError in PeopleController#index undefined method `scaffold' for PeopleController:Class RAILS_ROOT: C:/taiyo/INSTAN~1.0-W/rails_apps/myapp どこの手順が違ってるのが解らなくて、 Errorの解決方法ですごく困ってます。 どうかご指導をお願いいたします。 もう一つはErrorメッセージの3行目は C:/taiyo/INSTAN~1.0-W/rails_apps/myappですけど、 InstantRails-2.0-winフォルダのはずですけど、 INSTAN~1.0-Wフォルダになった原因がよくわからないです。 すごく困ってます。 ご指導お願いいたします。

  • Ruby on Railsについて

    Ruby on RailsでWebアプリケーションを作成します。 下記の順でやりました。 1、データベース表を作成。 2、新規アプリケーションの作成。 3、作成したアプリケーションがどのデータベースを使うのかを教える。 4、モデルの作成。 5、コントローラの作成。 6、新しいアプリケーションを起動。 ここでコマンドプロンプト画面内に表示されるポート番号を確認し、 Webブラウザを起動し、 アドレス欄に[http://localhost:ポート番号/アドレスブック/アドレスブックのリスト] を記入しました。 エラーが表示されました。 NoMethodError in PeopleController#list undefined method `scaffold' for PeopleController:Class

  • Ruby On RailsのCSV出力について

    Ruby On RailsでCSV出力を行うメソッドを作っているのですが、 そこで行いたいことは、 AA BB CC というデータがあったとして、 それぞれを AA.csv BB.csv CC.csv といった形でCSVデータを作成し、ブラウザにダウンロードのポップアップウィンドウを3回表示するという動きです。 ブラウザ上のボタン一つでこういった処理は可能なのでしょうか? なにか方法があれば教えていただきたいです。 無理なのであれば、なにかいい別の手段などを教えてください。 よろしくお願いします。

  • ruby on railsの シンタックスエラー

    ruby on rails の初心者です。 rubyのバージョンは、ruby 2.0.0p451 (2014-02-24 revision 45167)です。 http://www.rubylife.jp/rails/ini/index4.html の初心者向けの記事を読みながら、コントローラーとアクションの設定の勉強をしていたのですが、 終盤どうしてもrails sでサーバーを起動すると、 /Library/Ruby/Gems/2.0.0/gems/actionpack-4.1.1/lib/action_dispatch/routing/mapper.rb:196:in `normalize_conditions!': You should not use the `match` method in your router without specifying an HTTP method. (RuntimeError) If you want to expose your action to both GET and POST, add `via: [:get, :post]` option. If you want to expose your action to GET, use `get` in the router: Instead of: match "controller#action" Do: get "controller#action” という表示がでてきてしまい起動できません。 matchをgetなどにかえて対処使用としても無理でした(sintax errolorがでます)。 どうしてでしょうか。どなたか教えて頂けると幸いでございます。