ruby - 直接传递方法名称或通过用户输入传递给ruby中的respond_to方法有什么区别?
问题描述
我写了以下代码:
obj = Object.new
def obj.talk
puts "Talk called"
end
if obj.respond_to?(talk)
obj.send(talk)
else
puts "No talk"
end
输出如下:
undefined local variable or method `talk' for main:Object (NameError)
但是当我通过用户输入传递它时,它的工作原理是:
obj = Object.new
def obj.talk
puts "Talk called"
end
request = gets.chomp
if obj.respond_to?(request)
obj.send(request)
else
puts "No talk"
end
从终端Talk called
输入字符串时输出。talk
解决方案
感谢@Amadan,它通过使用方法的符号名称来工作。以下作品。
obj = Object.new;
def obj.talk
puts "Talk called"
end
if obj.respond_to?(:talk)
obj.send(:talk)
else
puts "No talk"
end
谈话叫
推荐阅读
- python - 如何在循环内将一行附加到熊猫数据帧而不覆盖它
- javascript - 获取最多 'N' 的数组中严格均匀间隔的元素
- c++ - 如何比较 OpenCV 中的两个 Mats 列
- css - CSS Grid - 仅在桌面上的元素交替顺序
- python - 在python中,我可以将日志写入控制台,但不会写入文件
- javascript - 用 JS 脚本突出显示我的复选框的边框
- kotlin - 是否可以让 recyclerview/listview 导航到不同的屏幕?
- java - 如何从首选项同步 getter 和 setter?
- python - 带有列表索引Python的for循环
- java - Spring Retry - 异常问题和重试