-4

ppのドキュメントにあるように、行の長さを 79 文字にラップ (制限) するにはどうすればよいですか?

次の例は、 ppのドキュメントに記載されているように、pp が出力をデフォルトの長さ 79 に制限していないことを示しています。

  • (1) 次のコードをファイル (pprfile.rb) に入れます。
#!/usr/bin/env ruby
require 'pp'
STDIN.read.split("\n").each do |l|
  PP.pp(l)
end

  • (2) Github のタイポコードレポジトリと cd をレポ ディレクトリにクローンします。
  • (3) 次のコマンドラインを実行します。
    • pprfile.rb < ./app/controllers/accounts_controller.rb | awk '長さ($0) > 79 {印刷長($0), $0}'
  • (4) すべての出力行が 79 文字以下に制限されることを期待していましたが、出力として得られたものは次のとおりです。

    89 "      redirect_back_or_default :controller => \"admin/dashboard\", :action => \"index\""
    94 "      self.current_user = User.authenticate(params[:user][:login], params[:user][:password])"
    82 "          self.current_user.remember_me unless self.current_user.remember_token?"
    82 "        add_to_cookies(:typo_user_profile, self.current_user.profile_label, '/')"
    91 "        redirect_back_or_default :controller => \"admin/dashboard\", :action => \"index\""
    80 "    @page_title = \"#{this_blog.blog_name} - #{_('Recover your password')}\""
    124 "      @user = User.find(:first, :conditions => [\"login = ? or email = ?\", params[:user][:login], params[:user][:login]])"
    108 "        flash[:notice] = _(\"An email has been successfully sent to your address with your new password\")"
    88 "    redirect_to(:controller => \"accounts\", :action => \"signup\") if User.count == 0"
    92 "    redirect_to :controller => \"setup\", :action => \"index\" if  ! this_blog.configured?"</li>
    

4

1 に答える 1

1

「pp」は、原子データ要素内ではなく、原子データ要素間でのみ壊れるためだと思います。アトミック要素は非複合型 (文字列、記号、数値など) になります。

つまり、シリアル化された要素が 79 列を超える配列がある場合、"pp" は要素間に改行を入れて配列をシリアル化します。ただし、これらの要素の 1 つが 100 文字の文字列である場合、その要素はそのままシリアル化されます。これは、おそらく「pp」がその「アトミック」要素をどこで分割するかを決定したくないためです。

検討:

pp(Array.new(100, 'foo')) # => <breaks between each element>
pp('x' * 100) # => <displays on one line since it doesn't know where to break>
于 2012-11-28T17:34:15.553 に答える