java_side
这个插件,运行时需要分辨rails应用是否激活了一些功能,常用的方法是判断参数值,比如:
if config.spring
require 'java_side/spring'
p 'spring supported'
end
但是,这么做有问题——用户很容易就忘记设置config里面的spring参数,结果这个读取属性的方法不存在
.../railties-3.0.6/lib/rails/railtie/configuration.rb:77:in `method_missing': undefined method `spring'
for #<Rails::Application::Configuration:0x2c642c2e> (NoMethodError)
from /home/john/projects/demo/vendor/plugins/java_side/init.rb:14
细节不解释了,关键是这里会抛出异常,不过ruby很灵活,于是我找到了这个方法:
if config.respond_to? 'spring'
require 'java_side/spring'
end
respond_to? 作用类似反射,会检查当前是否存在一个名为指定参数的 method ( 详见 这里
)
不过,这个方法也不是很通用,因为有时候要判断的不是 method ,例如我判断当前项目是否使用了 warbler 这个 gem,用的方法是看看有没有 Warbler 这个 module,这时 respond_to? 就不管用了
ruby有一个rescue机制,类似java的异常系统,不过语法比较灵活,例如:
begin
config.spring
rescue
nil
end
可以简化为
config.spring rescue nil
而且,无论是前一个 begin...end 块,还是后一个代码行,本身都是一条表达式,表达式的值取决于执行结果,如果有异常,那么就返回 rescue 的值(这里是nil,即java中的null)
有了这个武器,最后我是这么做的:
if (config.spring rescue nil)
require 'java_side/spring'
p 'spring supported'
end
if (Warbler.class rescue nil)
require 'java_side/warbler'
p 'warbler extended'
end
看起来好多了,收工!
(后记:昨天看别人的代码,我还是太土了,更好的方式应该是这样:
require 'java_side/warbler' if defined?(::Warbler)
真是让人情何以堪阿)
分享到:
相关推荐
类变量、全局变量、实例变量, 多态、为什么ruby、ruby编码规范
Ruby语言教程:Ruby 变量示例
ruby> $foo nil ruby> $foo = 5 5 ruby> $foo 5 应谨慎使用全局变量.由于在任何地方都可以被写因此他们相当危险.滥用全局变量会导致很难隔离臭虫;同时也视为程序的设计未经严格考虑.当你发现必须要使用全局...
Ruby中的变量有几种形式,分别是局部变量、实例变量、类变量、全局变量,对于初学者来说,常常容易搞混,尤其像本人这种做java的,理解起来还是头痛,经过仔细辨别学习,将这几种变量的差异及使用场景总结如下: ...
Ruby技巧,惯用Ruby,重构和最佳实践
主要介绍了Ruby中类变量和实例变量的比较,本文讲解了4点类变量和实例变量的不同之处,并给出了代码实例,需要的朋友可以参考下
ruby技巧.
ruby 技巧
Ruby 环境变量 Ruby 解释器使用下列环境变量来控制它的行为。ENV 对象包含了所有当前设置的环境变量列表。 对于 Unix,使用 env 命令来查看所有环境变量的列表。 HOSTNAME=ip-72-167-112-17.ip.secureserver.net ...
Ruby是一种动态、面向对象的编程语言,它具有简洁、易读的语法,被称为“程序员最好的朋友”。Ruby具有强大的元编程能力,允许开发者在运行时动态修改和生成代码。Ruby还有一个强大的标准库,提供了丰富的工具和功能...
ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码ruby代码
虽然无类型变量存在一定的缺点,但却有更多的优点并很好的符合Ruby快速简便(quick and easy)的哲学精神. 在大多数语言里,变量都必须指定其类型,可更改性(是不是个常数)和范围;由于类型的不存在,剩下的东西也可由...
ruby> $foo nil ruby> @foo nil ruby> foo ERR: (eval):1: undefined local variable or method `foo’ for main(Object) 对局部变量的第一次赋值做的很像一次声明.如果你指向一个未初始化的局部变量,...
Ruby是一种动态、面向对象的编程语言,它具有简洁、易读的语法,被称为“程序员最好的朋友”。Ruby具有强大的元编程能力,允许开发者在运行时动态修改和生成代码。Ruby还有一个强大的标准库,提供了丰富的工具和功能...
dotenv - 从.env加载环境变量
Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤。 注意:在安装时,您可能有不同的可用版本。 Window 系统下,我们可以使用 RubyInstaller 来安装 Ruby 环境,下载地址为:请点击这里...
在Ruby中,变量名以小写字母或下划线开头,支持动态类型。使用 `#{}` 可以在字符串中嵌入变量值。 #### 3. 控制结构 ```ruby # 条件判断 if age >= 18 puts "You are an adult." else puts "You are a minor." ...
主要介绍了Ruby中变量引用时的一些注意点,被当作变量或被当作方法调用的情况,需要的朋友可以参考下
ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...
Ruby技巧,惯用Ruby,重构和最佳实践您是否知道为什么经验丰富的Ruby程序员倾向于获取基本的集合和哈希值,而其他语言的程序员则选择更专业的类? D Ruby技巧,惯用Ruby,重构和最佳实践您是否知道为什么经验丰富的...