Ruby - 變數、常量和文字



變數是記憶體位置,用於儲存任何程式使用的資料。

Ruby 中有五種型別的變數。您已經在上一章中介紹了這些變數的簡要描述。本章將對這五種型別的變數進行說明。

Ruby 全域性變數

全域性變數以 $ 開頭。未初始化的全域性變數的值為 nil,並且會產生 -w 選項的警告。

對全域性變數的賦值將更改其全域性狀態。不建議使用全域性變數。它們會使程式難以理解。

以下是顯示全域性變數用法的示例。

#!/usr/bin/ruby

$global_variable = 10
class Class1
   def print_global
      puts "Global variable in Class1 is #$global_variable"
   end
end
class Class2
   def print_global
      puts "Global variable in Class2 is #$global_variable"
   end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

此處 $global_variable 是一個全域性變數。這將產生以下結果 −

注意 − 在 Ruby 中,可以透過在變數或常量之前放置一個井號 (#) 字元來訪問它們的任何值。

Global variable in Class1 is 10
Global variable in Class2 is 10

Ruby 例項變數

例項變數以 @ 開頭。未初始化的例項變數的值為 nil,並且會產生 -w 選項的警告。

以下是顯示例項變數用法的示例。

#!/usr/bin/ruby

class Customer
   def initialize(id, name, addr)
      @cust_id = id
      @cust_name = name
      @cust_addr = addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
   end
end

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.display_details()
cust2.display_details()

此處,@cust_id、@cust_name 和 @cust_addr 是例項變數。這將產生以下結果 −

Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala

Ruby 類變數

類變數以 @@ 開頭,並且必須在可以在方法定義中使用它們之前對其進行初始化。

引用未初始化的類變數將會產生錯誤。類變數在定義類變數的類或模組的後代之間共享。

覆蓋類變數將會產生 -w 選項的警告。

以下是顯示類變數用法的示例 −

#!/usr/bin/ruby

class Customer
   @@no_of_customers = 0
   def initialize(id, name, addr)
      @cust_id = id
      @cust_name = name
      @cust_addr = addr
   end
   def display_details()
      puts "Customer id #@cust_id"
      puts "Customer name #@cust_name"
      puts "Customer address #@cust_addr"
   end
   def total_no_of_customers()
      @@no_of_customers += 1
      puts "Total number of customers: #@@no_of_customers"
   end
end

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()

此處 @@no_of_customers 是一個類變數。這將產生以下結果 −

Total number of customers: 1
Total number of customers: 2

Ruby 區域性變數

區域性變數以小寫字母或 _ 開頭。區域性變數的範圍從 class、module、def 或 do 到相應的 end,或者從程式碼塊的左花括號到右花括號 {}。

引用未初始化的區域性變數時,將把它解釋為對無引數方法的呼叫。

對未初始化的區域性變數進行賦值也如同變數宣告。變數從宣告到當前範圍結束才會存在。區域性變數的生命週期在 Ruby 解析程式時確定。

在以上示例中,區域性變數為 id、name 和 addr。

Ruby 常量

常量以大寫字母開頭。在類或模組內定義的常量可從類或模組內訪問,而類或模組之外定義的常量在全域性範圍內可訪問。

常量不能在方法內定義。引用未初始化的常量會產生錯誤。對已初始化的常量進行賦值會產生警告。

#!/usr/bin/ruby

class Example
   VAR1 = 100
   VAR2 = 200
   def show
      puts "Value of first Constant is #{VAR1}"
      puts "Value of second Constant is #{VAR2}"
   end
end

# Create Objects
object = Example.new()
object.show

此處 VAR1 和 VAR2 是常量。這將產生以下結果:

Value of first Constant is 100
Value of second Constant is 200

Ruby 偽變數

偽變數類似於本地變數,但行為類似於常量。不能為這些變數指定任何值。

  • self − 當前方法的接收器物件。

  • true − 表示真值的變數。

  • false − 表示假值的變數。

  • nil − 表示未定義的變數。

  • __FILE__ − 當前原始檔的檔名。

  • __LINE__ − 原始檔中的當前行號。

Ruby 基本文字

Ruby 對文字所使用的規則非常簡單直觀。本部分解釋了所有基本的 Ruby 文字。

整數

Ruby 支援整數。整數的範圍為 -230 至 230-1 或 -262 至 262-1。此範圍內的整數為 Fixnum 類的物件,此範圍外的整數儲存在 Bignum 類的物件中。

編寫整數時,可以使用可選的前導符號、可選的進位制指示器(0 表示八進位制、0x 表示十六進位制或 0b 表示二進位制),後跟相應進位制的數字字串。數字字串中忽略下劃線字元。

還可以獲取 ASCII 字元對應的整數值,或使用問號字首轉義該序列。

示例

123                  # Fixnum decimal
1_234                # Fixnum decimal with underline
-500                 # Negative Fixnum
0377                 # octal
0xff                 # hexadecimal
0b1011               # binary
?a                   # character code for 'a'
?\n                  # code for a newline (0x0a)
12345678901234567890 # Bignum

注意 − 類和物件在教程的單獨章節中進行了說明。

浮點數

Ruby 支援浮點數。它們也是數字,不過帶有小數部分。浮點數是 Float 類的物件,可以為以下任何型別:

示例

123.4                # floating point value
1.0e6                # scientific notation
4E20                 # dot not required
4e+20                # sign before exponential

字串文字

Ruby 字串是 8 位位元組的序列,它們是 String 類的物件。雙引號字串允許替換和反斜槓符號,但單引號字串不允許替換,僅允許使用反斜槓符號 \\ 和 \'

示例

#!/usr/bin/ruby -w

puts 'escape using "\\"';
puts 'That\'s right';

這將產生以下結果:

escape using "\"
That's right

可以使用序列 #{ expr } 將任何 Ruby 表示式的值代入字串中。其中,expr 可以是任何 Ruby 表示式。

#!/usr/bin/ruby -w

puts "Multiplication Value : #{24*60*60}";

這將產生以下結果:

Multiplication Value : 86400

反斜槓符號

以下是 Ruby 支援的反斜槓符號列表:

符號 表示的字元
\n 換行符 (0x0a)
\r 回車符 (0x0d)
\f 換頁符 (0x0c)
\b 退格符 (0x08)
\a 鈴聲 (0x07)
\e 轉義符 (0x1b)
\s 空格符 (0x20)
\nnn 八進位制符號 (n 的取值範圍為 0-7)
\xnn 十六進位制符號 (n 的取值範圍為 0-9、a-f 或 A-F)
\cx, \C-x Control-x
\M-x Meta-x (c | 0x80)
\M-\C-x Meta-Control-x
\x 字元 x

有關 Ruby 字串的更多詳細資訊,請參閱 Ruby 字串

Ruby 陣列

Ruby 陣列的文字透過在方括號之間放置一個以逗號分隔的物件引用系列來建立。忽略末尾的逗號。

示例

#!/usr/bin/ruby

ary = [  "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
   puts i
end

這將產生以下結果:

fred
10
3.14
This is a string
last element

有關 Ruby 陣列的更多詳細資訊,請參閱 Ruby 陣列

Ruby 雜湊

Ruby 雜湊文字是透過在大括號之間放置鍵/值對列表來建立的,其中鍵和值之間帶有逗號或 => 序列。忽略末尾的逗號。

示例

#!/usr/bin/ruby

hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
   print key, " is ", value, "\n"
end

這將產生以下結果:

red is 3840
green is 240
blue is 15

有關 Ruby 雜湊的更多詳細資訊,請參閱 Ruby 雜湊

Ruby 範圍

範圍表示一個區間,即一個具有起始值和結束值的值集合。範圍可以使用 s..e 和 s...e 文字或 Range.new 來構建。

使用 .. 構建的範圍從起始值執行到結束值,含結束值。使用 ... 建立的範圍不包含結束值。用作迭代器時,範圍將返回序列中的每個值。

範圍 (1..5) 表示它包含值 1、2、3、4、5,而範圍 (1...5) 表示它包含值 1、2、3、4。

示例

#!/usr/bin/ruby

(10..15).each do |n| 
   print n, ' ' 
end

這將產生以下結果:

10 11 12 13 14 15

有關 Ruby 範圍的更多詳細資訊,請參閱 Ruby 範圍

廣告
© . All rights reserved.