Forum: Ruby Suppressing printing of evaluated expressions in irb

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Michael H. (Guest)
on 2006-03-21 01:13
(Received via mailing list)
I've looked all over, but I can't figure out how to suppress the
printing of evaluated expressions in irb.  Ordinarily, this is no
problem:

irb(main):001:0> a = []
=> []

But what if the thing returned is huge?

irb(main):001:0> b = function_returning_something_huge
<disaster>

In Python, the interpreter suppresses the printing of the expression if
there is assignment, but not otherwise:

>>> a = []
>>> a
[]
>>> b = function_returning_something_huge()
>>> b
<disaster, but I asked for it!>

How do I get the same or similar behavior in irb?

Thanks in advance,

Michael
Timothy B. (Guest)
on 2006-03-21 02:25
(Received via mailing list)
On Mar 20, 2006, at 3:13 PM, Michael H. wrote:

> <disaster>
>

In irb, enter `conf.return_format = ""`  That'll turn off all
printing of evaluations in irb, which means you have to use `puts` if
you want to see any results, but it'll avoid your disasters.

You can add 2 methods to your .irbrc if you like, one that clears the
formatting with the line I gave, and one that sets it back to normal
(the default is "=> %s\n"), so that you can switch back and forth
between the two modes easily.

There may be a better solution, but this is all I came up with.
Still, I hope it helps.

Tim
Timothy B. (Guest)
on 2006-03-21 02:37
(Received via mailing list)
On Mar 20, 2006, at 4:25 PM, Timothy B. wrote:
> There may be a better solution, but this is all I came up with.
>

There is another solution, that of course I realize after I send out
the message.  You can set conf.return_format to "=> %0.100s\n", where
the number after the . (in this case 100), is the maximum number of
characters you want printed to the screen.

Tim
Nate Smith (Guest)
on 2006-03-21 03:11
(Received via mailing list)
Hello everyone,

I'm trying to keep a thread alive after exiting a method. The pseudo-
code is as follows:

class A

	def start
		@mainThread = Thread.new {
			oneThread = Thread.new {
				# do some stuff
			}
			twoThread = Thread.new {
				# do some other stuff
			}
			oneThread.join
			twoThread.join
		}
	end
end

aObject = A.new
aObject.start


The problem is that since there is no :join call on @mainThread, it
is killed (and hence oneThread, and twoThread as well) once control
ends in :start. This is perfectly valid, of course, but I would like
@mainThread to stay alive after control in :start ends. Is there any
way to do this? Thanks

Nate
Caleb C. (Guest)
on 2006-03-21 03:20
(Received via mailing list)
On 3/20/06, Michael H. <removed_email_address@domain.invalid> wrote:
> <disaster>
If you want to suppress printing for just one line, try appending ';0'
to the end of the command:

irb(main):001:0> b = function_returning_something_huge;0
=> 0
Joel VanderWerf (Guest)
on 2006-03-21 03:51
(Received via mailing list)
Nate Smith wrote:
>                 # do some stuff
> aObject = A.new
>
Is you program exiting after aObject.start? Then maybe you want to do
@mainThread.join at that point?

The @mainThread should still be alive, until the program exits, unless
it has suffered an exception.

Do you have Thread.abort_on_exception = true?
Michael H. (Guest)
on 2006-03-28 03:14
(Received via mailing list)
Thanks for your help.  Tim's suggestions are nice, but I'd prefer to be
able to make the print/no-print decision on the fly, on a per-statement
basis.  On these grounds, Caleb's suggestion meets my needs best.  I
had actually tried using a semicolon, but of course irb then just waits
for the next statement.  Putting a 0 (or anything else) is a bit of a
kludge compared to the Python interpreter's convention, but it gets the
job done.

Thanks,

Michael
This topic is locked and can not be replied to.