ruby - 我可以在 Ruby 中动态调用数学运算符吗?

标签 ruby reflection metaprogramming

ruby中有这样的东西吗?

send(+, 1, 2)

我想让这段代码看起来不那么冗余

if op == "+"
  return arg1 + arg2
elsif op == "-"
  return arg1 - arg2
elsif op == "*"
  return arg1 * arg2
elsif op == "/"
  return arg1 / arg2

最佳答案

是的,只需像这样使用 send(或者更好的是 public_send):

arg1.public_send(op, arg2)

这是可行的,因为 Ruby 中的大多数运算符(包括 +-*/and more)只需调用方法。所以 1 + 21.+(2) 相同。

如果是用户输入,您可能还想将 op 列入白名单,例如%w[+ - */].include?(op),否则用户将能够调用任意方法(这是一个潜在的安全漏洞)。

关于ruby - 我可以在 Ruby 中动态调用数学运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13060239/

相关文章:

ruby - 如何使用 ruby​​ FFI 读取静态结构数组

ruby-on-rails - Rails 4 有任何 cms 吗?

c# - 如何在C#.Net中使用反射(指定多少层次结构)来获取类的属性?

描述符的 Python 元编程 : How to add descriptor after class definition?

c++ - 使用可变模板参数解析 lambda 签名

ruby - 令人困惑的 RSpec 哈希匹配差异

ruby - Each_pair 模拟数组(压缩 2 个数组)

.net - 在运行时创建一个类并在.Net 中使用它?

c++ - 测试函数是虚函数还是构造函数

java - 自定义 Java 类加载器未用于加载依赖项?