2011-05-06 30 views
0

"".chomp返回""和系统命令返回空字符串如果其中不知道它。换句话说,下面的代码将缓存“”,而不是再次检查系统。红宝石 - 空字符串为零,以避免变量缓存

@wkhtmltoimage ||= `which wkhtmltoimage-proxy`.chomp 

我想

  • 保持变量的缓存,而不是再次运行系统命令,如果发现。
  • 避免为了运行系统命令两次在代码检查.empty?

如果格格返回了空字符串为零,它不会是一个问题。有什么建议么?

回答

3

创建一个缓存行调用的方法,在那里检查一个空字符串,如果是则返回nil,否则返回输出。

def wkhtml_to_image_command 
    output = `which wkhtmltoimage-proxy`.chomp 
    output.empty? ? nil : output 
end 

@wkhtmltoimage ||= wkhtml_to_image_command 
0

作为方法缓存的替代方案,这是一种更紧凑的单线程。

@wkhtmltoimage ||= (c=`which wkhtmltoimage-proxy`.chomp).empty? ? nil : c 

不像缓存方法那样可读,我必须承认。