views:

49

answers:

1
class Mycompute

  def initialize(str)
    @str=str
  end

  def values
    @@result=@str
  end

  def up
    @@result.upcase
  end

end
irb(main):012:0> Mycompute.new("Abc").values

=> "Abc"
irb(main):013:0>

irb(main):014:0* Mycompute.new("Abc").up
=> "ABC"
irb(main):015:0> Mycompute.new("Abc").values.up

NoMethodError: undefined method `up' for "Abc":String
  from (irb):15
  from :0

How can I make Mycompute.new("Abc").values.up work?

A: 

The object returned from values need have up.

class Mycompute

  def initialize(str)
    @str=str
  end

  def values
    @@result=@str

    def @@result.up
      self.upcase
    end

    @@result
  end

  def up
    @@result.upcase
  end

end

This works well.

Mycompute.new("Abc").values #=> "Abc"
Mycompute.new("Abc").up #=> "ABC"
Mycompute.new("Abc").values.up #=> "ABC"
Shinya Miyazaki