ruby - 反撇号运算符

  显示原文与译文双语对照的内容
0 0

下面的代码从RubyTapas屏幕截图中提取出一个Cowsays消息到终端。 类有两种方法,say 和一个以参数作为参数的反撇号方法。 如果没有反撇号方法,它不工作,但是我不理解什么时候使用反撇号方法输出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 0

这里显示的技巧是,你可以覆盖反引号操作符。

所以,不要写:


Net::HTTP.get_print(URI.parse("http://www.cowsays.com/cowsay?message=#{message}"))

你可以覆盖反撇号并使用


Net::HTTP.get_print(`http://www.cowsays.com/cowsay?message=#{message}`)

改为改为。

正如屏幕上提到的和这里的评论- 这只是一个技巧,而且不建议实际使用它:

0 0

这应该是普通的引号,像 ',而不是反引号。 反向引用用于执行 shell 命令并返回结果。

例如要获取文件列表:

 
files = `ls`

 

这显然通过 Kernel 中的反撇号方法传递,如果你想要的话,你可以通过。 我从未见过这样做,在生产应用中似乎是一个非常糟糕的想法。

原作者:
...