杂项语法¶ ↑
结束表达式¶ ↑
Ruby 使用换行符作为表达式的结尾。当以运算符、开括号、逗号等结束一行时,表达式将继续。
你可以使用 ;
(分号)结束表达式。分号最常用于 ruby -e
。
缩进¶ ↑
Ruby 不要求任何缩进。通常,ruby 程序缩进两个空格。
如果你在启用警告的情况下运行 ruby 并且存在缩进不匹配,你将收到警告。
alias
¶ ↑
alias
关键字最常用于为方法创建别名。在为方法创建别名时,你可以使用其名称或符号
alias new_name old_name alias :new_name :old_name
对于方法,Module#alias_method
通常可以用来代替 alias
。
你也可以使用 alias
为全局变量创建别名
$old = 0 alias $new $old p $new # prints 0
你可以在任何作用域中使用 alias
。
undef
¶ ↑
undef
关键字阻止当前类响应对指定方法的调用。
undef my_method
你可以使用符号代替方法名称
undef :my_method
你可以取消定义多个方法
undef method1, method2
你可以在任何作用域中使用 undef
。另请参见 Module#undef_method
defined?
¶ ↑
defined?
是一个关键字,它返回一个描述其参数的字符串
p defined?(UNDEFINED_CONSTANT) # prints nil p defined?(RUBY_VERSION) # prints "constant" p defined?(1 + 1) # prints "method"
你不需要在 defined?
中使用括号,但由于 defined?
的低优先级,建议使用括号。
例如,如果你想检查实例变量是否存在,并且该实例变量是否为零
defined? @instance_variable && @instance_variable.zero?
这将返回 "expression"
,如果实例变量未定义,则这不是你想要的。
@instance_variable = 1 defined?(@instance_variable) && @instance_variable.zero?
在检查实例变量是否定义时添加括号是一种更好的检查方式。当实例变量未定义时,它会正确返回 nil
,当实例变量不为零时,它会返回 false
。
使用特定的反射方法(例如实例变量的 instance_variable_defined? 或常量的 const_defined?)比使用 defined?
不容易出错。
defined?
基于是否存在活动的正则表达式匹配以及存在多少个捕获组,特殊处理一些正则表达式全局变量
/b/ =~ 'a' defined?($~) # => "global-variable" defined?($&) # => nil defined?($`) # => nil defined?($') # => nil defined?($+) # => nil defined?($1) # => nil defined?($2) # => nil /./ =~ 'a' defined?($~) # => "global-variable" defined?($&) # => "global-variable" defined?($`) # => "global-variable" defined?($') # => "global-variable" defined?($+) # => nil defined?($1) # => nil defined?($2) # => nil /(.)/ =~ 'a' defined?($~) # => "global-variable" defined?($&) # => "global-variable" defined?($`) # => "global-variable" defined?($') # => "global-variable" defined?($+) # => "global-variable" defined?($1) # => "global-variable" defined?($2) # => nil
BEGIN
和 END
¶ ↑
BEGIN
定义一个在当前文件中任何其他代码之前运行的代码块。它通常在带有 ruby -e
的单行代码中使用。类似地,END
定义一个在任何其他代码之后运行的代码块。
BEGIN
必须出现在顶层,当你将其在方法内部使用时,END
将发出警告。
这是一个例子
BEGIN { count = 0 }
你必须使用 {
和 }
,不能使用 do
和 end
。
这是一个单行示例,用于从标准输入或参数列表中的任何文件中添加数字
ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i'