如何在Ruby中将子例程(subroutine)存储到变量中?
你写的代码确实存在错误,具体问题和修改方案如下:
错误原因
Ruby和Python的函数引用逻辑有差异:Python中写不带括号的函数名会获取函数本身的引用,而Ruby的方法调用默认可以省略括号,你写x = printSample时,程序会直接尝试执行printSample方法,该方法要求传入1个字符串参数,这里没有传参,运行时会直接抛出参数数量不匹配的错误,无法执行到后续步骤。
正确实现方案
要将方法存到变量中,需要用method方法显式获取方法对象的引用,调用存储的方法时使用call方法执行,修改后代码如下:
def printSample(str) puts str end # 显式获取printSample方法的引用,参数为方法名对应的符号 x = method(:printSample) str = "你好" # 调用存储的方法 x.call(str)
上述代码运行后会输出:
你好
内容的提问来源于stack exchange,提问作者jolyne
相关产品推荐
相关产品推荐

