如何在 Ruby 中使用“method”而不是其中缀形式的整数方法

How to use integer methods using `method`, not their infix form, in Ruby

提问人:MolarFox 提问时间:6/2/2023 更新时间:6/2/2023 访问量:49

问:

我希望以编程方式在两个整数上应用一个典型的不固定运算(例如:、),其中操作是通过字符串指定的。我已经成功地使用.method访问了该方法本身+-*/

这是一种有效的模式,可以正确解析为1.+(2)3

通过扩展,我将定义一种可以为运算符获取变量字符串的方法,如下所示:as1 + 21.method('+')(2)

以上会导致语法错误,尽管直到以这种方式检索方法确实有效,但我不确定需要什么语法才能传递第二个整数参数。例如:

1.method('+')     # <Method: Integer#+(_)>
1.method('+') 2   # syntax error, unexpected integer literal, expecting end-of-input
1.method('+')(2)  # syntax error, unexpected '(', expecting end-of-input

以这种方式执行操作的正确语法是什么?1 + 2

我正在使用:ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]

Ruby 方法 language-features infix-notation 前缀表示法

评论


答:

3赞 Siim Liiser 6/2/2023 #1

该类有自己的几个实例方法。您在这里要查找的是电话Method

它也别名为 和[]===

1.method('+').call(2) #=> 3
1.method('+')[2] #=> 3
1.method('+') === 2 #=> 3

评论

4赞 3limin4t0r 6/2/2023
另一种选择是哪个是句法糖1.method('+').(2)1.method('+').call(2)
3赞 Stefan 6/2/2023 #2

method增加创建方法对象的一些开销。

您可以改用 public_send 以编程方式向对象发送消息:

1.public_send('+', 2)
#=> 3

名称/运算符可以作为字符串或符号给出,即 或。'+':+