雜項語法

結束表達式

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? 會根據是否有 active regexp 比對和有多少個擷取群組,特別處理一些 regexp 全域變數

/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

BEGINEND

BEGIN 定義一個區塊,它會在目前檔案中的任何其他程式碼之前執行。它通常與 ruby -e 一起用於單行程式碼中。類似地,END 定義一個區塊,它會在任何其他程式碼之後執行。

BEGIN 必須出現在頂層,而當您在方法內使用 END 時,它會發出警告。

以下是範例

BEGIN {
  count = 0
}

您必須使用 {},不可使用 doend

以下是一行範例,它會新增標準輸入或引數清單中任何檔案的數字

ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i'