使用send方法和点方法之间的区别

dsc*_*her 2 ruby

本书The Well Grounded Rubyist声明您可以使用此send方法来检查object(ticket)是否响应用户输入:

if ticket.respond_to?(request) 
  puts ticket.send(request)
else
  puts "No such information available"
end  
Run Code Online (Sandbox Code Playgroud)

上面的代码和写作之间有什么区别:

if ticket.respond_to?(request) 
  puts ticket.request
else
  puts "No such information available"
end  
Run Code Online (Sandbox Code Playgroud)

如果ticket响应用户输入,为什么不直接使用点符号来调用它?

Chu*_*uck 7

ticket.request将消息发送requestticket对象.

ticket.send(request)变量中包含的内容request发送给ticket对象.所以如果你request = :clone在此之前写过,那条线就相当于ticket.clone.

  • 此外,如果`:request`是私有方法,则可以使用`ticket.send(:request)`调用它,而`ticket.request`会引发异常. (2认同)