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

zaq34kh6  于 2023-06-05  发布在  Ruby
关注(0)|答案(2)|浏览(142)

我希望以编程方式应用一个典型的中缀操作(例如:+-*/),其中操作通过字符串指定。我已经成功地使用.method访问了方法本身
这是一个有效的模式,1.+(2)正确地解析为3
通过扩展,我需要定义一种方法,可以为操作符接受一个变量字符串,如下所示:1 + 2作为1.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]

ds97pgxw

ds97pgxw1#

Method类有几个自己的示例方法。你要找的是call
它也别名为[]===

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

ecbunoof2#

method为创建方法对象增加了一些开销。
您可以使用public_send来以编程方式向对象发送消息:

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

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

相关问题