Issue #6733 has been updated by Dan0042 (Daniel DeLorme).


This sounds like a very powerful and flexible approach, but perhaps a little over-engineered?
Maybe a more KISS approach would be sufficient; just define `Object#simple_inspect` to be used when we need a short string, like in `NoMethodError#message`.
By default it can return `#<MyClass:0x00007fe40a128ae0>` (without ivars).

----------------------------------------
Feature #6733: New inspect framework
https://bugs.ruby-lang.org/issues/6733#change-94842

* Author: akr (Akira Tanaka)
* Status: Open
* Priority: Normal
----------------------------------------
After we discussed http://bugs.ruby-lang.org/issues/6291 at a developer meeting,
we re-realized new inspect framework may be useful.

Problem:
* inspect method may generate too long string but sometimes whole string is not required.
  For example, first 70 characters are enough for error messages (backtrace).
* inspect can't know a encoding to be expected.
* inspect generates may short strings and discard them immediately.

If we have a new method, inspect_to(buffer), and
it (or overridden method in subclass) adds the inspected result to buffer,
we can solve above problems.
buffer has a method, <<.
It may be a string, IO or other object.

For too long string, buffer itself can throw (or raise) when buffered output is reached to a specified limit.

For encoding, buffer can record an encoding.
(p method creates a buffer object using $stdout's encoding.)

For small strings, in C level, we can create a rb_buffer_add(VALUE buffer, const char *p, long len) and
it don't need to allocate a String object.

This is big change but we can preserve compatibility by following default inspect_to method:

class Object
  def inspect_to(buffer)
    buffer << self.inspect
  end
end

If legacy class which has inspect but not inspect_to,
Object#inspect_to calls inspect and use the result.




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>