Ruby中能否动态修改并使用操作符?
Ruby中能否动态修改并使用操作符?
当然可以实现!不过你直接写operator_a = +这种方式Ruby是不认的,因为+本身是操作符,不能直接赋值给变量。下面给你几种实用的实现思路:
用符号配合
send方法(最常用)
Ruby里的算术操作符本质上都是对象的方法,比如x + y其实等价于x.send(:+, y)。我们可以把操作符转换成对应的符号来存储,之后用send调用:x = 2 y = 4 operator_a = :+ # 用符号表示加法操作符 operator_b = :- # 减法 operator_c = :* # 乘法 operator_d = :/ # 除法 puts x.send(operator_a, y) # 输出 8 puts x.send(operator_b, y) # 输出 -2 puts x.send(operator_c, y) # 输出 8 puts x.send(operator_d, y) # 输出 0.5用Proc封装操作逻辑
如果需要更灵活的自定义操作(不止内置操作符),可以用Proc(匿名函数)来封装:operator_add = ->(a, b) { a + b } operator_multiply = ->(a, b) { a * b } puts operator_add.call(x, y) # 输出 8 puts operator_multiply.call(x, y) # 输出 8这种方式还能扩展成自定义的操作,比如
operator_power = ->(a, b) { a ** b },非常灵活。封装成工具方法优化调用体验
如果你觉得send的写法不够直观,可以封装一个简单的方法:def calculate(a, operator, b) a.send(operator, b) end puts calculate(x, :+, y) # 输出 8 puts calculate(x, :/, y) # 输出 0.5
需要注意的是,Ruby本身不支持直接自定义x operator_a y这种语法,但上面的几种方式已经完全能满足动态使用操作符的需求啦~
备注:内容来源于stack exchange,提问作者Gusteau
相关产品推荐
相关产品推荐

