Ruby変数


変数は、任意のプログラムで使用できる任意のデータを保持する記憶場所です。

Ruby は 5 種類の変数をサポートしています。

  • 通常、アンダースコアで始まる小文字: 変数。

  • $ で始まる: グローバル変数。 $开头:全局变量(Global variable)。

  • @开头:实例变量(Instance variable)。

  • @@

  • @ で始まる: インスタンス変数。

@@ で始める: クラス変数 クラス変数は継承チェーン全体で共有されます

大文字で始める: 定数。

これらの変数については、前の章ですでに大まかに理解しました。この章では、これら 5 種類の変数について詳しく説明します。

Ruby グローバル変数

グローバル変数は $ で始まります。初期化されていないグローバル変数の値は

nil
であり、-w オプションを使用すると警告が生成されます。

グローバル変数に値を代入するとグローバルの状態が変化するため、グローバル変数の使用はお勧めできません。

次の例は、グローバル変数の使用法を示しています。

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

$global_variable = 10
class Class1
  def print_global
      puts "全局变量在 Class1 中输出为 #$global_variable"
  end
end
class Class2
  def print_global
      puts "全局变量在 Class2 中输出为 #$global_variable"
  end
end

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

ここで、$global_variable はグローバル変数です。これにより、次の結果が生成されます:

注:

Ruby では、変数または定数の前に # 文字を置くことで、変数または定数の値にアクセスできます。

全局变量在 Class1 中输出为 10
全局变量在 Class2 中输出为 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

# 创建对象
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# 调用方法
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

# 创建对象
cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2=Customer.new("2", "Poul", "New Empire road, Khandala")

# 调用方法
cust1.total_no_of_customers()
cust2.total_no_of_customers()

ここで、@@no_of_customers はクラス変数です。これにより、次の結果が生成されます:

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

Ruby ローカル変数

ローカル変数は小文字またはアンダースコア _ で始まります。ローカル変数のスコープは、クラス、モジュール、def、do から対応する末尾まで、または左中括弧から右中括弧 {} までです。

初期化されていないローカル変数が呼び出される場合、パラメータなしでメソッドを呼び出したと解釈されます。

初期化されていないローカル変数への代入も変数宣言とみなされます。変数は現在のスコープが終了するまで存在します。ローカル変数の有効期間は、Ruby がプログラムを解析するときに決定されます。 🎜🎜上記の例では、ローカル変数は id、name、addr です。 🎜🎜ルビ定数🎜🎜 定数は大文字で始まります。クラスまたはモジュール内で定義された定数には、クラスまたはモジュール内からアクセスでき、クラスまたはモジュールの外で定義された定数にはグローバルにアクセスできます。 🎜

メソッド内で定数を定義することはできません。初期化されていない定数を参照するとエラーが発生します。初期化された定数に値を代入すると、警告が生成されます。

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

class Example
   VAR1 = 100
   VAR2 = 200
   def show
       puts "第一个常量的值为 #{VAR1}"
       puts "第二个常量的值为 #{VAR2}"
   end
end

# 创建对象
object=Example.new()
object.show


ここで、VAR1とVAR2は定数です。これにより、次の結果が生成されます:

第一个常量的值为 100
第二个常量的值为 200

Ruby 疑似変数

これらは、ローカル変数のように見えますが、定数のように動作する特別な変数です。これらの変数に値を割り当てることはできません。

  • self: 現在のメソッドの受信側オブジェクト。

  • tru​​e:はtrueの値を表します。

  • false:はfalseの値を表します。

  • nil:は未定義の値を表します。

  • __FILE__: 現在のソース ファイルの名前。

  • __LINE__: ソース ファイル内の現在の行の番号。