这真的让我感到困惑。
我有一个实例方法我正在尝试调试,但是我遇到了一个问题,我的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
答案 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