没有put或得到实例方法 - Ruby

时间:2014-12-27 20:44:57

标签: ruby

这真的让我感到困惑。

我有一个实例方法我正在尝试调试,但是我遇到了一个问题,我的put和gets并没有显示在实例方法中。

代码:

#! /usr/bin/env ruby

class Calculator
  def evaluate(string)
    ops = string.split(' ')
    ops.map! do |item|
      if item.is_a? Numeric
        return item.to_i
      else
        return item.to_sym
      end
    end

    puts "Got #{string}"         #Doesn't output
    puts "Converted to #{ops}"   #This too

    opscopy = ops.clone

    ops.each.with_index do |item, index|
      if item == :* || item == :/
        opscopy[index] = ops[index-1].send(item, ops[index+1])
        opscopy[index-1] = opscopy[index+1] = nil
      end
    end

    ops = opscopy.compact

    puts "After multi/div #{ops}"

    ops.each.with_index do |item, index|
      if item == :+ || item == :-
        opscopy[index] = ops[index-1].send(item, ops[index+1])
        opscopy[index-1] = opscopy[index+1] = nil
      end
    end

    puts "After +/- #{opscopy.compact}"

    opscopy.compact.first
  end
end

item = Calculator.new.evaluate "4 * 2"
puts "#{item} == 8"  #Prints :(

输出:

action@X:~/workspace/ruby$ ./calculator.rb                                                                                                                                                 
4 == 8    

1 个答案:

答案 0 :(得分:1)

return块中的map!是问题所在。

ops.map! do |item|
  if item.is_a? Numeric
    return item.to_i # returns from method
  else
    return item.to_sym # returns from method
  end
end

在调用map!之前,您将在puts块中返回该方法。

map!块更改为:

ops.map! do |item|
  item.send(item.is_a?(Numeric) ? :to_i : :to_sym)
end