Ruby 简洁的计算器代码

chenge · 2013年07月14日 · 最后由 xranthoar 回复于 2013年07月23日 · 3118 次阅读
#       -*- coding: utf-8 -*-
#
#      Ruby Calculator v1.0.0
#          by gdi2290
#
#    MRI Ruby Version: 2.0.0p0
#

# method_missing approach
class Calculator
  def initialize
    @cal={
      add:      ->(a,b) { a + b },
      subtract: ->(a,b) { a - b },
      divide:   ->(a,b) { a / b },
      multiply: ->(a,b) { a * b },
      power:    ->(a,b) { a ** b }
    }
  end
  def method_missing(expression, a, b)
    @cal[expression].call(a,b)
  end
end

# define_method approach
class Calculator
  def initialize
    cal :add, :+
    cal :subtract, :-
    cal :divide, :/
    cal :multiply, :*
    cal :power, :**
  end

  def cal(name, sym)
    Calculator.class_eval do
      define_method name, ->(a, b) { a.send(sym, b) }
    end
  end
end

class Calculator [[:add, :+], [:subtract, :-], [:divide, :/], [:multiply, :], [:power, :*]].each do |m| define_method(m[0]) {|a, b| a.send(m[1], b)} end end

不知道有没有解决1 / 3 * 3这样的计算

这用的是 ruby 的什么特性啊,学玩基础的表示有点看不懂。

对于 Ruby 来说 eval() 真的足够了。

#4 楼 @jin1804 可以找元编程一书,都有介绍。代码注释也有说明。

eval(STDIN.gets)

需要 登录 后方可回复, 如果你还没有账号请 注册新账号