Why getting error for this code fragment

5 class Movie_Info
  6 attr_accessor :runtime, :language, :sound, :color
  7 def to_str
38 puts
(runtime==nil?'nil':runtime)+'&&&'+(language==nil?'nil':language)+'&&&'+(color==nil?'nil':color)+'&&&'+(sound==nil?'nil':sound)
39 return str
40 end
41 end

the statement at line 38 causes some error.

./util.rb:38: syntax error, unexpected tSTRING_BEG, expecting kDO or '{'
or '(' (SyntaxError)
                puts
(runtime==nil?'nil':runtime)+'&&&'+(language==nil?'nil':language)+'&&&'+(color==nil?'nil':color)+'&&&'+(sound==nil?'nil':sound)

···

--
Posted via http://www.ruby-forum.com/.

Are you trying to use unary if operations? If so you need to add ':'
like so (runtime==nil ? 'nil' : :runtime)

···

On Wed, Mar 31, 2010 at 1:27 AM, Amishera Amishera <amishera2007@gmail.com> wrote:

5 class Movie_Info
6 attr_accessor :runtime, :language, :sound, :color
7 def to_str
38 puts
(runtime==nil?'nil':runtime)+'&&&'+(language==nil?'nil':language)+'&&&'+(color==nil?'nil':color)+'&&&'+(sound==nil?'nil':sound)
39 return str
40 end
41 end

the statement at line 38 causes some error.

./util.rb:38: syntax error, unexpected tSTRING_BEG, expecting kDO or '{'
or '(' (SyntaxError)
puts
(runtime==nil?'nil':runtime)+'&&&'+(language==nil?'nil':language)+'&&&'+(color==nil?'nil':color)+'&&&'+(sound==nil?'nil':sound)
--
Posted via http://www.ruby-forum.com/\.

--
jbw

Try it like this:

  5 class Movie_Info
  6 attr_accessor :runtime, :language, :sound, :color
  7 def to_str
38 puts (runtime==nil ? 'nil' : runtime)+'&&&'+(language==nil ? 'nil' : language)+'&&&'+(color==nil ? 'nil' : color)+'&&&'+(sound==nil ? 'nil' : sound)
39 return str
40 end
41 end

It might be that ?' is being parsed as a character literal or it might be that :runtime is being parsed as a symbol. It's hard to tell because it seems to be missing lines 8..37. But in any case, I think that you are really trying for something like these. All three of these should give you the same result. In your original, you never create a str variable. The puts will send output to $stdout, but not return anything except nil.

Also, the to_str is used when the object should act like a String. Compare that with to_s which typically returns a representation of the object as a string (often a more human-readable version that the default from Object#to_s).

class Movie_Info
   attr_accessor :runtime, :language, :sound, :color
   def to_str
     str = self.runtime || 'nil'
     str << '&&&' << (self.language || 'nil')
     str << '&&&' << (self.color || 'nil')
     str << '&&&' << (self.sound || 'nil')
     str
   end
end

class Movie_Info
   attr_accessor :runtime, :language, :sound, :color
   def to_str
     [ :runtime, :language, :color, :sound ].map do |field|
       self.send(field) || 'nil'
     end.join('&&&')
   end
end

class Movie_Info
   attr_accessor :runtime, :language, :sound, :color
   def to_str
     [ :runtime, :language, :color, :sound ].map do |field|
       instance_variable_get("@#{field}") || 'nil'
     end.join('&&&')
   end
end

-Rob
Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Mar 30, 2010, at 8:27 PM, Amishera Amishera wrote:

5 class Movie_Info
6 attr_accessor :runtime, :language, :sound, :color
7 def to_str
38 puts
(runtime==nil?'nil':runtime)+'&&&'+(language==nil?'nil':language)+'&&&'+(color==nil?'nil':color)+'&&&'+(sound==nil?'nil':sound)
39 return str
40 end
41 end

the statement at line 38 causes some error.

./util.rb:38: syntax error, unexpected tSTRING_BEG, expecting kDO or '{'
or '(' (SyntaxError)
               puts
(runtime==nil?'nil':runtime)+'&&&'+(language==nil?'nil':language)+'&&&'+(color==nil?'nil':color)+'&&&'+(sound==nil?'nil':sound)
--
Posted via http://www.ruby-forum.com/\.

Rob Biedenharn wrote:

Try it like this:

  5 class Movie_Info
  6 attr_accessor :runtime, :language, :sound, :color
  7 def to_str
38 puts (runtime==nil ? 'nil' : runtime)+'&&&'+
(language==nil ? 'nil' : language)+'&&&'+(color==nil ? 'nil' : color)
+'&&&'+(sound==nil ? 'nil' : sound)
39 return str
40 end
41 end

Or even:

  def to_str
    "#{runtime||'nil'}&&&#{language||'nil'}&&&#{color||'nil'}&&&#{sound||'nil'}"
  end

···

--
Posted via http://www.ruby-forum.com/\.