代码之家  ›  专栏  ›  技术社区  ›  Imagist

` if uu name_uu=='uu main_uuu'`红宝石中的等价物

  •  93
  • Imagist  · 技术社区  · 14 年前

    我对鲁比不熟悉。我想从一个模块中导入函数,这个模块包含一个我想继续单独使用的工具。在python中,我只需执行以下操作:

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

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

    2 回复  |  直到 11 年前
        1
  •  121
  •   Matchu    14 年前

    从我在野外看到的Ruby(当然,不是一吨),这不是一个标准的Ruby设计模式。模块和脚本应该保持分离,所以如果没有一种真正好的、干净的方式来完成这项工作,我不会感到惊讶。

    编辑: Found it.

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

    但这绝对不常见。

        2
  •  9
  •   uKolka    11 年前

    如果堆栈跟踪为空,则可以从右到左开始执行。我不知道这是传统的还是非传统的,因为我在Ruby工作了大约一周。

    if caller.length == 0
      # do stuff
    end
    

    概念证明:

    文件:Test.RB

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

    文件:shmest.rb

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

    用途:

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