`
Hooopo
  • 浏览: 335364 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Ruby Verbose Warning Mode

    博客分类:
  • Ruby
阅读更多
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)
分享到:
评论
1 楼 洛克刘 2011-11-09  
这篇博文很有提示作用啊。感谢博主

相关推荐

    ruby_warning_filter:无噪音的详细Ruby模式

    gem "ruby_warning_filter" , "~> 1.0.0" 在加载项目之前,将以下代码放在某处。 在Rails应用程序中,一个好的地方应该放在“ config / boot.rb”的末尾。 $VERBOSE = true require "ruby_warning_filter" $...

    精简JRE - verbose命令

    当我们需要对Java程序的运行过程进行详细分析,特别是诊断性能问题或内存泄漏时,`verbose`命令是一个非常有用的工具。本篇内容将深入探讨如何精简JRE并使用verbose命令来获取运行时的详细信息。 首先,精简JRE是...

    Laravel开发-laravel-verbose

    在本文中,我们将深入探讨Laravel开发中的一个重要扩展——`laravel-verbose`。这个包是专门为Laravel和Lumen框架设计的,旨在增强内置控制台命令的功能,提供更丰富的详细信息,帮助开发者更好地理解和调试他们的...

    Ruby-Slop简单的轻量级选项解析

    option :verbose, :short => "-v", :description => "Enable verbose mode" option :file, :short => "-f", :argument => :required, :description => "Path to file" end if options[:verbose] puts "Verbose ...

    前端开源库-karma-verbose-summary-reporter

    **前端开源库-karma-verbose-summary-reporter** `karma-verbose-summary-reporter` 是一个专为前端开发者设计的开源库,它与 Karma 集成,提供了更详尽的测试结果摘要报告。Karma 是一个流行的自动化测试运行器,...

    RobustICA.rar_darkcgp_gulfnac_鲁棒 ICA_鲁棒ICA_鲁棒性ICA

    独立成分分析(Independent Component Analysis, 简称ICA)是一种数据挖掘技术,用于从混合信号中分离出独立的、非高斯分布的源信号。在实际应用中,由于噪声、缺失数据或异常值的存在,传统的ICA算法可能表现不佳。...

    Ruby-GLI类似Git接口的命令行解析器

    2. **处理选项**:GLI支持短选项(如 `-v`)和长选项(如 `--verbose`)。你可以指定选项的类型,如字符串、整数或布尔值,GLI会自动验证用户输入。 3. **生成帮助文档**:GLI会根据你的命令和选项定义自动生成帮助...

    Ruby-将Ruby变成一个多功能命令行实用程序

    在Ruby编程语言中,创建命令行接口(CLI)工具是一种非常实用的方法,它可以使开发者能够快速构建具有交互功能的工具,方便日常任务自动化或者提供特定服务。Ruby的灵活性和强大的库支持使得构建CLI变得简单易行。...

    tachyons-verbose, 用于人类的功能CSS详细版.zip

    tachyons-verbose, 用于人类的功能CSS详细版 超光速粒子( 详细)用于人类的功能css详细版。快速构建和设计新用户界面,无需编写 css 。版本 4.9.1.原理所有内容都应该是 100%响应任何设备上都应该可以读一切都应该尽...

    Ruby-Main一个类工厂和DSL用于快速生成命令行程序

    Ruby是一种强大的动态编程语言,常用于Web开发、脚本编写以及构建命令行工具。在创建命令行接口(CLI)时,通常需要编写大量的代码来处理命令解析、参数验证和业务逻辑。为了简化这一过程,开发者们创造了各种工具,...

    HelloWorld的javap -verbose HelloWorld 字节码初探

    标题中的“HelloWorld的javap -verbose HelloWorld”指的是在Java编程环境中,通过`javap`这个命令行工具来反汇编一个简单的“HelloWorld”程序,以深入理解字节码的工作原理。`javap`是Java Platform Debugger ...

    Ruby语言笔记包括简介、主要特性、命令行选项、环境变量、基础语法等

    - **--verbose**: 启用冗余模式。 - **--yydebug**: 启用解析器调试模式。 #### 四、Ruby的环境变量 Ruby解释器使用以下环境变量来控制其行为: - **DLN_LIBRARY_PATH**: 动态加载模块的搜索路径。 - **HOME**: ...

    ruby-nmap:到nmap的Ruby界面,探索工具和安全端口扫描程序。 允许自动执行nmap和解析nmap XML文件

    Ruby地图 ...描述 Ruby界面,用于 ,探索工具和安全/端口扫描程序。 允许自动执行nmap和解析nmap XML文件。 特征 提供用于运行nmap的Ruby接口。... verbose = true nmap . ports = [ 20 , 21 , 22 , 23 ,

    Django模板获取field的verbose_name实例

    在Django框架中,verbose_name是一个重要的属性,主要用于提供模型字段的可读性名称。它在代码中通常用于替代硬编码的字符串,以提高代码的可维护性和国际化支持。当我们在模型定义中为字段指定verbose_name时,...

    Verbose-crx插件

    语言:English (United States) 此扩展程序将覆盖默认的chrome newtab,并显示当天的相关数据 Verbose是一个轻量级扩展,可以在新选项卡窗口中以纯文本显示当前日期和时间。

    coff2omf转换工具

    在IT行业中,我们经常需要处理不同的文件格式,特别是在编译和链接阶段,这些阶段涉及到对象文件和库文件的处理。本文将深入探讨“coff2omf”转换工具及其相关知识点。 COFF(Common Object File Format)是通用的...

    VSCode + WSL 2 + Ruby环境搭建图文详解

    这可以通过`wsl --list --verbose`查看当前状态,并用`wsl --set-version Ubuntu 2`进行设置。 在Ubuntu环境中,安装Ruby可以选择使用RVM(Ruby Version Manager),但为了简化步骤,我们直接使用`apt`安装。执行`...

    PyPI 官网下载 | verbose-octo-goggles-0.1.tar.gz

    《PyPI官网下载:verbose-octo-goggles-0.1.tar.gz——探索Python库在分布式与云原生环境中的应用》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python开发者提供了众多开源软件包。本文...

Global site tag (gtag.js) - Google Analytics