以下代码取自RubyTapas截屏视频,向终端打印出Cowsays消息。该类有两个方法say
,还有一个反引号方法,它接受url作为参数。没有反引号方法它不起作用,但我不明白何时/如何使用反引号方法打印出cowsays消息,因为从不调用反引号方法。看来(对我而言)您只需要调用say
方法,就像Cowsays.new.say "Hello, StackOverflow"
一样。你能解释一下如何在这段代码中调用反引号方法吗?
______________________
< Hello, StackOverflow >
----------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
码
require 'net/http'
require 'cgi'
class Cowsays
def `(url)
URI.parse(url)
end
def say(message)
message = CGI.escape(message)
Net::HTTP.get_print(`http://www.cowsays.com/cowsay?message=#{message}`)
end
end
Cowsays.new.say "Hello, StackOverflow"
答案 0 :(得分:1)
这里显示的技巧是,你可以覆盖反引号操作符。
所以,而不是写作:
Net::HTTP.get_print(URI.parse("http://www.cowsays.com/cowsay?message=#{message}"))
您可以覆盖反引号并使用
Net::HTTP.get_print(`http://www.cowsays.com/cowsay?message=#{message}`)
代替。
正如截屏视频和评论中所提到的 - 这只是一个技巧,并不建议实际使用它:)
答案 1 :(得分:0)
这应该是'
之类的常规引号而不是反引号。 Backtick用于执行shell命令并返回结果。
例如,要获取文件列表:
files = `ls`
这显然是传递给Kernel
中的反引号方法,如果你愿意,你可以覆盖它。我以前从未见过这样做,在生产应用程序中看起来是一个非常糟糕的主意。