Greg wrote:
A newbie here trying to develop one of Pine's tutorial scripts. Ruby v1.8.6
I get different results from my script in Terminal, TextMate, and BBEdit. How is this possible?
TextMate seems to be the closest to what I'd expect. I'd buy it if the undo's were better. Plus I already own BBEdit. I realize BBEdit doesn't profess to support Ruby script running that much, but I expected Terminal to be consistent.
I've driven myself crazy trying to debug my script, stalled in BBEdit, so went to Terminal, but after putting in all kinds of puts to figure out what was going on, tried my demo TextMate and it ran better. In all cases exactly the same file.
Thanks for any clues.
It would help if you'd post your script, what answers you expected, and what answers you got.
Thanks for answering. Here it goes:
#!/usr/bin/env ruby
class OrangeTree
MSG_GROW = "Type \"year\" to grow your tree."
MSG_PICK = "Type a number to pick some more fruit. "
EXIT_TXT = "Something went wrong."
def initialize # we have one tree, does it need a name?
@heightInches = 0 # at year zero
@age = 0
@fruit = 0 # inches, work out feet and inches later
puts "Congratulations, you planted an orange tree. In a few years it will start bearing fruit. #{@age} " # Age only for debugging. Can take it out.
puts MSG_GROW
end
def ageOneYear
@heightInches = @heightInches +1
puts 'Height: ' + @height.to_s
@age += 1
# @age = @age + 1
puts "Got to ageOneYear. Age: #{@age}"
case( @age )
when (1..3) : puts("Your #{@age} year old tree is too young to bear fruit yet. #{MSG_GROW}" )
when (4..29) : puts(" Age: #{@age}. Place holder until get 1..3 working." )
when (30) : puts("Your tree was very fruitful, but it reached old age and died.")
else puts( " Something went wrong. #{EXIT_TXT}" )
end
end # def ageOneYear
def height
# returns the height end
def pick_an_orange
puts 'Got to pick_an_orange, but haven\'t defined yet'
# reduce this year count by one
end
end # class OrangeTree
# here we go countLoop = 0
tree = OrangeTree.new # assume we need to initialize it. Does it need a name?
while countLoop < 100
countLoop += 1
puts "countLoop = #{countLoop}" # debugging.
if gets.to_s=='year' puts 'In the gets.to_s if clause' # debugging. tree.ageOneYear
end
gets case when 'year' : tree.ageOneYear # , y as shortcut?
when (1..100) : tree.pick_an_orange
else puts('Don\'t be greedy, don\'t try to pick more than 100 oranges')
end
end # while
TextMate response. I answered 'year' to each request for input:
RubyMate r6354 running Ruby r1.8.6 (/usr/local/bin/ruby)
OrangeTree.post.rb
Congratulations, you planted an orange tree. In a few years it will start bearing fruit. 0 Type "year" to grow your tree.
countLoop = 1
Height: Got to ageOneYear. Age: 1
Your 1 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
countLoop = 2
Height: Got to ageOneYear. Age: 2
Your 2 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
countLoop = 3
Height: Got to ageOneYear. Age: 3
Your 3 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
countLoop = 4
Height: Got to ageOneYear. Age: 4
Age: 4. Place holder until get 1..3 working.
NoMethodError: undefined method `+' for nil:NilClass
method gets
in stdin_dialog.rb at line 6
method gets
in stdin_dialog.rb at line 13
at top level
in OrangeTree.post.rb at line 58
==END TextMate response
Terminal response. All 'year' are my responses. I stopped after two none reponses.
new-host-2:~ xxxxxx$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [powerpc-darwin8.9.0]
new-host-2:~ xxxxxx$ ruby "/Volumes/share/Greg/Ruby++/OrangeTree.post.rb"
Congratulations, you planted an orange tree. In a few years it will start bearing fruit. 0 Type "year" to grow your tree.
countLoop = 1
year
Height: Got to ageOneYear. Age: 1
Your 1 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
year
===End Terminal
BBEdit output. I only Cmd-R to run the script. I was never asked for input.
Congratulations, you planted an orange tree. In a few years it will start bearing fruit. 0 Type "year" to grow your tree.
countLoop = 1
Height: Got to ageOneYear. Age: 1
Your 1 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
countLoop = 2
Height: Got to ageOneYear. Age: 2
Your 2 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
countLoop = 3
Height: Got to ageOneYear. Age: 3
Your 3 year old tree is too young to bear fruit yet. Type "year" to grow your tree.
countLoop = 4
Height: Got to ageOneYear. Age: 4
Age: 4. Place holder until get 1..3 working.
countLoop = 5
Height: Got to ageOneYear. Age: 5
Age: 5. Place holder until get 1..3 working.
<SNIP-SNIP>
countLoop = 100
Height: Got to ageOneYear. Age: 100
Something went wrong. Something went wrong.
===END BBEdit
TextMate was close, but I expected values for @heightInches to increase with each iteration.
I would like it to work in BBEdit, but realize BareBones support for this is weak. But at least Terminal should get it right. I own BBEdit, so am reluctant to buy TextMate, particularly since it has significant features I would like missing.
Thanks for any help.
I hope this isn't a double posting. My original was via Usenet, then I found the Google Groups and tried to post there, but I am not sure I am a member there. This version may be somewhat different as I had to recreate it after realizing Google Groups wasn't working for me.
···
On 2007-05-07 18:16:38 -0700, Tim Hunter <TimHunter@nc.rr.com> said: