首页 文章

`if __name__ == '__main__'`相当于Ruby

提问于
浏览
91

我是Ruby的新手 . 我想从包含我想要继续单独使用的工具的模块导入函数 . 在Python中我会这样做:

def a():
    ...
def b():
    ...
if __name__ == '__main__':
    a()
    b()

这允许我运行程序或将其作为模块导入以分别使用 a() 和/或 b() . Ruby中的等效范例是什么?

2 回答

  • 118

    从我在野外看到的Ruby(授予,而不是吨),这不是标准的Ruby设计模式 . 模块和脚本应该保持独立,所以如果没有一个好的,干净的方法,我不会感到惊讶 .

    EDIT: Found it.

    if __FILE__ == $0
        foo()
        bar()
    end
    

    但这绝对不常见 .

  • 9

    如果堆栈跟踪为空,我们可以开始向右和向左执行 . 我不知道这是用于传统还是非传统,因为我已经使用Ruby大约一周了 .

    if caller.length == 0
      # do stuff
    end
    

    概念证明:

    file:test.rb

    #!/usr/bin/ruby                                                                 
    
    if caller.length == 0
      puts "Main script"
    end
    
    puts "Test"
    

    file:shmest.rb

    #!/usr/bin/ruby -I .                                                            
    
    require 'test.rb'
    
    puts "Shmest"
    

    用法:

    $ ./shmest.rb 
    Test
    Shmest
    
    $ ./test.rb
    Main script
    Test
    

相关问题