Yep, as the post title implies, I’m a newbie. Being a pragmatic newbie
I’d rather be learning to program, than searching for answers to
non-language acquisition questions/problems. I’m pretty sure the
following falls in that latter group, so if it’s in a manual somewhere
please tell me so politely and point me to the manual.
I’m starting to go through Dave T.’ Programming Ruby/Picaxe (I’m on
pgs 25-26 2nd edition if you care) and I’m using TextMate/Terminal to
code and run modified versions of the book’s examples. So I ran a
version of the following with a typographical error, which was apparent
with the Terminal feedback. So far, so good. I fixed the error and
tried to run it again. The problem is that now when I run it, all I
get in response is a new blank prompt. I’ve tried renaming the file,
the class, giving it a completely new set of variables in the array and
quiting/restarting the Terminal. If I type the exact same thing into
irb I’m able to create a book and book2 instance and .inspect each of
them. But with the TextMate/Terminal combo = Nothing, nadda, zip!
HELP, PLEASE!
#filename bib.rb
class Book
def initialize(title, author, pages) @title = title @author = author @pages = pages
end
end
book = Book.new(“Ruby Tutorial”, “Dave”, 831)
book.inspect
It’s a language question. The inspect method returns a string. That
string is not automatically displayed on the terminal. You have to print
the string if you want to see it. Use “puts book.inspect” for example.
The reason you see the result in irb is that irb prints it for you.
If I type the exact same thing into
irb I’m able to create a book and book2 instance and .inspect each of
them. But with the TextMate/Terminal combo = Nothing, nadda, zip!
HELP, PLEASE!
<…>
book = Book.new(“Ruby Tutorial”, “Dave”, 831)
book.inspect
It is because you do not output anything.
Change the last line to puts book.inspect
Thank you! Your explanation helps me understand the subsequent
failures. Any idea why it ‘almost’ worked the first time? (it printed
the @pages and @author info, and then it told me there was an error.)
Object#inspect returns a string, but you aren’t doing anything with it!
irb is showing you the value of book.inspect as usual, but the script
version is less verbose.
There are shortcuts for these bundle commands, and there are several
other aids to evaluating Ruby code built-in to the TextMate Ruby
bundle. I think you will find TextMate makes it easy to explore Ruby
without constantly switching back and forth to Terminal.
book = Book.new(“Ruby Tutorial”, “Dave”, 831)
book.inspect
Others have mentioned the need to output the value you are returning,
and have suggested:
puts book.inspect
as a way to see that information. I just wanted to add the suggestion
that the ‘p’ method:
p book
automatically calls #inspect on the object(s) passed, and then spits
them to stdout like puts does. (For comparison, the puts method calls #to_s on the object(s) passed.) ‘p’ is very convenient when developing
and testing out your application, as the output sometimes gives you
more insight into the actual format of the data…particularly for
arrays:
irb(main):003:0> p a
[1, “2”, [“3 4”, 5], 6]
=> nil
As you can see from that first line, it’s the result of #inspect that
irb uses when outputting the result of the last command. (Both puts and
p return nil when finished, which is where those two “=> nil” lines
come from in irb.)
As you can see from that first line, it’s the result of #inspect that
irb uses when outputting the result of the last command. (Both puts and
p return nil when finished, which is where those two “=> nil” lines
come from in irb.)