首页 > 解决方案 > 直接传递方法名称或通过用户输入传递给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

标签: ruby

解决方案


感谢@Amadan,它通过使用方法的符号名称来工作。以下作品。

obj = Object.new;

def obj.talk
    puts "Talk called"
end

if obj.respond_to?(:talk)
    obj.send(:talk)
else
    puts "No talk"
end

谈话叫


推荐阅读