В чем разница между передачей имени метода напрямую или пользовательским вводом для метода response_to в ruby? - PullRequest
0 голосов
/ 25 сентября 2018

Я написал следующий код:

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 с терминала.

1 Ответ

0 голосов
/ 25 сентября 2018

Спасибо @Amadan, он работает, используя символьное имя метода.Следующие работы.

obj = Object.new;

def obj.talk
    puts "Talk called"
end

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

Разговор называется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...