这是一个相当流行的 ruby 方言,有时被称为 safe assignment in condition。
# bad (+ a warning) if v = array.grep(/foo/) do_something(v) ... end # good (MRI would still complain, but RuboCop won't) if (v = array.grep(/foo/)) do_something(v) ... end # good v = array.grep(/foo/) if v do_something(v) ... end
在任何可以的地方使用快捷的 self assignment 操作符。
# bad x = x + y x = x * y x = x**y x = x / y x = x || y x = x && y # good x += y x *= y x **= y x /= y x ||= y x &&= y
只有在变量没有被初始化的时候使用 ||= 来初始化变量。
# set name to Vozhidar, only if it's nil or false name ||= 'Bozhidar'
不要使用||=来初始化布尔变量。(想想如果当前值为false的时候会发生什么。)
# bad - would set enabled to true even if it was false enable ||= true # good enabled = true if enabled.nil?
使用 &&= 来预处理变量不确定是否存在的变量。使用 &&= 仅仅在(变量)存在的时候
才会改变值,除去了使用 if 来检查它的存在性。
# bad if something something = something.downcase end # bad something = something ? nil : something.downcase # ok something = something.downcase if something # good something = something && something.downcase # better something &&= something.downcase
避免全等(case equality)=== 操作符的使用。从名称可知,这是 case 表达式的隐式使用并且在 case 语句外的场合使用会产生难以理解的代码。
# bad Array === something (1..100) === 7 /something/ === some_string # good something.is_a?(Array) (1..100).include?(7) some_string =~ /something/
避免使用 Perl 的指定变量风格(比如,$:,$; 等等。)。它们相当神秘,不鼓励在单行代码之外使用它们。
使用 English 库提供的友好别名。
# bad $:.unshift File.dirname(__FILE__) # good require 'English' $LOAD_PATH.unshift File.dirname(__FILE__) 从来不要在方法名和(参数)开括号之间使用空格。 # bad f (3+2) + 1 # good f(3 + 2) +1
如果方法的第一个参数以开括号开始,通常使用括号把它们全部括起来。例如f((3 + 2) + 1)。
通常使用 -w 选项运行 Ruby 解释器,在你忘记上面所诉规则,ruby 将会提示你。
定义单行块使用新的 lambda 语法。定义多行块中使用 lambda 方法。










