何时使用'if __FILE__ == $ PROGRAM_NAME'

时间:2018-02-08 16:29:30

标签: ruby

我看到许多程序被以下if声明所包围:

if __FILE__ == $PROGRAM_NAME
  # rest of the program
end

我读到“确保当前文件对应于需要执行的程序”。

我应该何时在程序中使用此声明?在什么情况下我应该使用它?什么时候没必要?

2 个答案:

答案 0 :(得分:3)

  

什么时候没必要?

几乎总是。

  

我什么时候应该在我的程序中使用此语句?

如果您的文件主要由其他文件使用,但有时您希望直接运行该文件。在这种情况下,代码的这一部分通常会进行一些测试或示例使用。

# animal.rb
class Animal
  def voice
    raise NotImplementedError
  end
end

class Dog < Animal
  def voice
    'Woof!'
  end
end


if __FILE__ == $PROGRAM_NAME
  puts "testing voice"
  puts Dog.new.voice == 'Woof!'
end

如果您运行ruby animal.rb,您将看到调试/测试输出。如果您只是require 'animal'来自其他文件,则不会。

答案 1 :(得分:2)

当代码从另一个Ruby程序作为库调用时,该条件不成立。当它是执行的主程序时,该条件成立。

有时,您希望对可以用作库或作为主程序运行的软件进行编程,并希望使其具有相应的行为方式。在这种情况下,您可以使用它。