专栏首页技术小黑屋Ruby程序区分运行来源

Ruby程序区分运行来源

当我们在写模块的时候,或多或少需要直接运行这个文件也可以执行一些方法,但是这样对于当这个模块被require或者include时,显得不好,在ruby里,有没有区分运行来自当前文件,还是被require的目标文件调用呢?

Python可以

比如像Python这样

lineos:false

1 2

if __name__ == '__main__': print "from direct running"

Ruby当然也可以

对于处处为程序员着想,拥有快乐编程理念的Ruby来说当然是可以区别的。其原理就是判断启动文件是否为模块的代码文件。

lineos:false

1 2 3

if __FILE__ == $0 puts 'called from direct running' end

举个例子

工具类模块utils.rb

lineos:false

1 2 3 4 5 6 7 8 9 10 11 12

module Utils class StringUtils def self.test puts "test method myfile=" + __FILE__ + ';load from ' + $0 end end end if __FILE__ == $0 puts 'called from direct running' Utils::StringUtils.test() end

直接运行,结果,if条件成立,执行了输出

lineos:false

1 2 3

20:04:37-androidyue~/rubydir/test$ ruby utils.rb called from direct running test method myfile=utils.rb;load from utils.rb

引用Utils的类test.rb

lineos:false

1 2

require './utils' Utils::StringUtils.test()

运行结果,引入模块的条件不成立,没有输出called from direct running

lineos:false

1 2

20:08:07-androidyue~/rubydir/test$ ruby test.rb test method myfile=/home/androidyue/rubydir/test/utils.rb;load from test.rb

其他

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编写地道的 Kotlin 代码

    Kotlin 以其简洁实用的语法,赢得了很多Java 开发者,尤其是 Android 开发者的喜爱与应用。然而,虽然我们使用 Kotlin 进行编码,可能并没有...

    技术小黑屋
  • 树莓派入手指南

    最近入手了树莓派,简单整理一些入手的注意事项,本文尤其是对于不了解树莓派并想要购买的同学有参考意义.

    技术小黑屋
  • 捕获Android文本中链接点击事件

    Android中的TTextView很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击。但是我们可以捕...

    技术小黑屋
  • Pytest的配置文件(八)

    在前面的文章中介绍了Pytest中使用conftest.py来共享fixture,事实上我们可以通过Pytest中的配置文件pytest.ini来改变Pyte...

    无涯WuYa
  • Angular 从入坑到挖坑 - 路由守卫连连看

    Angular 入坑记录的笔记第六篇,介绍 Angular 路由模块中关于路由守卫的相关知识点,了解常用到的路由守卫接口,知道如何通过实现路由守卫接口来实现特定...

    程序员宇说
  • 类似微博等社交软件中用户关注关系的存储实现方案遐想

    本文主要对设计方案进行一些思考及测试,思考结果的正确性无法保证,测试结果保证正确.

    呼延十
  • Swift3.0 - 扩展

    b.如果想要在定义协议的时候,不指定变量名称,在实现协议的时候,再去设定变量类型,应该怎么写?

    酷走天涯
  • 为什么要使用PyTest?

    在“失败”部分,您可以查看失败的方法和失败行。x == y表示5 == 6,这是错误的。

    用户7466307
  • MySQL数据库远程连接、创建新用户、设置权限

    上篇文章我们写了在服务器上安装MySQL,可以随时远程连接,我们这次讲如何创建一个新的用户,给予权限,并且实现远程连接!

    浩Coding
  • Fish shell 入门教程

    命令行是程序员的必备技能。图形界面虽然好看,解决问题还是要靠命令行。 命令行由 Shell 提供。各种命令通过 Shell,传递给操作系统的内核。学习命令行就是...

    ruanyf

扫码关注云+社区

领取腾讯云代金券