Miscellaneous Syntax
其他语法
结束表达
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
在任何范围内使用。另请参阅模块#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?
。
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'