Ruby在很多方面是一个更优雅的Perl,从Perl社区继承了很多文化。其中之一就是:以verbose warning模式运行Ruby。
Ruby是一个非常宽松的语言,她运行你访问一个未定义的实例变量,允许你动态对原有的类的方法进行增删改查操作,甚至允许你给一个常量重新赋值…
但这仅仅是允许,并不代表Ruby支持你这样做。
以warning模式运行你的程序,这样就可以为你发现一些不小心而犯的错误,比如拼写错误和无意的覆盖了别人的方法。
不幸的是,默认情况warning模式是关闭的,你可以在运行Ruby时加上-w参数来开启。
如果你你的代码有一些洁癖,每次运行程序开启warning模式,解决掉输出警告的代码行是一件很有趣的事情。
下面看看一个例子:
@use_less_variable
def redefinition_method;end
def redefinition_method;end
REDEF_CONST = 23
REDEF_CONST = 42
def mismatched_indentation
end
def undefined_instance_variable
@instance
end
undefined_instance_variable
names = %w{hooopo rubyist}
names.map{|names| names + " hello"}
puts(1 +2)
两次运行结果如下:
引用
hooopo@hooopo:~$ ruby warning.rb
warning.rb:7: warning: already initialized constant REDEF_CONST
3
引用
hooopo@hooopo:~$ ruby -w warning.rb
warning.rb:10: warning: mismatched indentations at ‘end’ with ‘def’ at 9
warning.rb:18: warning: shadowing outer local variable – names
warning.rb:20: warning: `+’ after local variable is interpreted as binary operator
warning.rb:20: warning: even though it seems like unary operator
warning.rb:1: warning: useless use of a variable in void context
warning.rb:4: warning: method redefined; discarding old redefinition_method
warning.rb:3: warning: previous definition of redefinition_method was here
warning.rb:7: warning: already initialized constant REDEF_CONST
warning.rb:13: warning: instance variable @instance not initialized
3
第一次运行没有加warning模式,只报了一个常量已经初始化警告,第二次以warning模式运行,所有的警告都打印出来了。
引用
mismatched indentations at ‘end’ with ‘def’ at 9
这是一个缩进没有对齐的警告
引用
shadowing outer local variable – names
这个一般发生在具有闭包语法的语言中,当两个不同的局部变量具有相同的名字时,内部作用域的变量会遮住外部作用域的变量。
引用
`+’ after local variable is interpreted as binary operator even though it seems like unary operator
这句是说+号被解析成了二元操作符,即使它看起来像一元操作符。
引用
useless use of a variable in void context
没有用到的变量
引用
method redefined; discarding old redefinition_method 和 previous definition of redefinition_method was here
当方法被覆盖之后会有警告,并且会提示你被覆盖的方法原来定义在什么位置
引用
instance variable @instance not initialized
实例变量没有初始化就使用了
总之,Ruby的openclass和元编程特性给了程序员更大的自由。但是我们自己应该清楚自己的每行代码到底做了什么。 这样才能充分发挥自由带来的便利,而不是混乱。经常在warning模式下运行你的代码,清理恼人的warning是让你的代码长期稳定运行的保证。
Ruby Verbose Warning Mode (1)
Ruby Verbose Warning Mode (2)
分享到:
相关推荐
gem "ruby_warning_filter" , "~> 1.0.0" 在加载项目之前,将以下代码放在某处。 在Rails应用程序中,一个好的地方应该放在“ config / boot.rb”的末尾。 $VERBOSE = true require "ruby_warning_filter" $...
许多程序设计语言都支持利用正则表达式进行字符串操作,python自然也不例外,下面这篇文章主要给大家介绍了关于在python中如何正确使用正则表达式的详细模式(Verbose mode expression)的相关资料,需要的朋友可以...
C:\>gem envRubyGems Environment: - RUBYGEMS VERSION: 1.3.7 - RUBY VERSION: 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32] - INSTALLATION DIRECTORY: c:/ruby/lib/ruby/gems/1.8 - RUBY EXECUTABLE: c:/...
Laravel开发-laravel-verbose 为Laravel/Lumen内置控制台命令添加详细信息的包
鲁棒性非常好的ICA算法程序,做独立成分分析时候效果好
前端开源库-karma-verbose-summary-reporter卡玛详细摘要记者,卡玛记者带来摘要冗长至极。
NULL 博文链接:https://jarg.iteye.com/blog/866301
tachyons-verbose, 用于人类的功能CSS详细版 超光速粒子( 详细)用于人类的功能css详细版。快速构建和设计新用户界面,无需编写 css 。版本 4.9.1.原理所有内容都应该是 100%响应任何设备上都应该可以读一切都应该尽...
Ruby地图 ...描述 Ruby界面,用于 ,探索工具和安全/端口扫描程序。 允许自动执行nmap和解析nmap XML文件。 特征 提供用于运行nmap的Ruby接口。... verbose = true nmap . ports = [ 20 , 21 , 22 , 23 ,
语言:English (United States) 此扩展程序将覆盖默认的chrome newtab,并显示当天的相关数据 Verbose是一个轻量级扩展,可以在新选项卡窗口中以纯文本显示当前日期和时间。
VerboseLog-Shell-Script
NULL 博文链接:https://josephmok.iteye.com/blog/813774
# 生成有详细信息的汇编文件 ## 例子 #include int main(void) { int i; for (i = 0; i ; i++) printf("%d ", i); putchar ('\n'); return 0; }
定义模型: class Game(models.Model): name = models.CharField(u'游戏...获取字段名和verbose_name: from django.apps import apps def getmodelfield(appname,modelname): modelobj = apps.get_model(appname
coff2omf转换工具
captcha = CaptchaField(verbose_name = u’验证码’) label是这个Field如果在form中的话会显示。 verbose_name 在form中不会显示 只是一种说明而已 补充知识:django models verbose_name 的作用 一、 verbose_...
新建一个名为verbose_name.py的文件。 from django import template register = template.Library() @register.simple_tag def get_verbose_field_name(instance, field_name): """ Returns verbose_name for a ...
森弗 semver-cli是用于比较和操作版本字符串的简单命令行工具。 基本上,它是优秀的的cli包装器,在出色的的帮助下 usage: semver [] <command> [<args> ...] ... -v, --verbose Verbose mode. C