第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Ruby 的變量

本章節(jié)我們將講解 Ruby 中如何創(chuàng)建一個(gè)變量,變量都有哪幾種,在什么場景下會使用這些變量。

1. 什么是變量

變量來源于數(shù)學(xué),是計(jì)算機(jī)語言中能儲存計(jì)算結(jié)果或能表示值抽象概念?!俜蕉x

在 Ruby 中變量用來保存程序要使用的任何數(shù)據(jù)。

讓我們創(chuàng)建一個(gè)變量。

2. Ruby中如何創(chuàng)建一個(gè)變量

在Ruby中我們使用"變量名稱 = 名稱的值"這種形式來為變量進(jìn)行賦值操作。

下面是一些創(chuàng)建不同類型變量的例子:

實(shí)例:

name = "小明"
@cars = ['Toyota', 'BMW','Benz']
@@color = 'red'
$global_variable = 10

我們可以通過class方法查看這個(gè)變量是什么類型的變量(換種說法,查看這個(gè)變量所屬的類是什么)。

實(shí)例:

> count = 10
=> 10
> count.class
=> Integer

解釋:不同于 Java 和 C 等所謂的強(qiáng)變量和靜態(tài)變量類型,在聲明變量的時(shí)候必須定義變量類型,此類型的編程語言在定義變量之后不能更改變量的類型。

這個(gè)是 C 語言的例子:

int count = 10; 

Ruby 是一種動(dòng)態(tài)的語言,創(chuàng)建變量無需定義變量類型,取而代之的是 Ruby 的解釋器查看分配給變量值的類型,并動(dòng)態(tài)計(jì)算出變量的類型。這樣做的優(yōu)點(diǎn)是,聲明了變量之后,我們可以在之后的代碼中動(dòng)態(tài)更改變量而無需去關(guān)心它的類型

下面我們來了解在 Ruby 中都有哪幾種變量:

3. Ruby中有哪幾種變量

在 Ruby 中,根據(jù)變量的作用范圍(作用域),變量被分為局部變量local variables)、實(shí)例變量instance variables)、類變量class variables)、全局變量global variables)4種。另外,Ruby還有一種常量類型(constant)。每種變量都通過在變量名的開頭使用特殊字符來聲明,如下表所示。

名稱開頭 作用范圍
$ 構(gòu)造函數(shù),創(chuàng)建新對象時(shí)
@ 析構(gòu)函數(shù),對象的銷毀時(shí)
[a-z] or _ 局部變量(作用域在定義的一個(gè)方法里)
[A-Z] 方法重載,靜態(tài)調(diào)用一個(gè)不可訪問方法時(shí)
@@ 類變量(作用域?yàn)橐粋€(gè)類)

Ruby 有兩個(gè)不能分配值的偽變量,一個(gè)是 nil,它被分配給未初始化的對象;另一個(gè)是 self,它被用來指向正在操作的對象。

3.1 全局變量

Ruby 中的全局變量可以在 Ruby 程序中的任何位置訪問,無論它們在何處聲明。全局變量名稱以美元符號($)為前綴。

實(shí)例:

$welcome = "Welcome to Ruby Essentials"

注意事項(xiàng):不要輕易使用全局變量,問題在于,它們不僅在程序代碼中的任何位置都可見,而且還可以在應(yīng)用程序中的任何位置進(jìn)行更改。這會使異常追蹤變得困難。

3.2 類變量

類變量是在類的所有實(shí)例之間共享的變量。這意味著從該類實(shí)例化的所有對象僅存在一個(gè)變量值。這意味著,如果一個(gè)對象實(shí)例更改了類變量的值,那么對于所有其他對象實(shí)例,該新值將實(shí)質(zhì)上發(fā)生更改。類變量通過在變量名前添加兩個(gè) @ 字符(@@)來聲明,并且類變量必須在創(chuàng)建時(shí)初始化。

實(shí)例:

@@total = 0

3.3 實(shí)例變量

實(shí)例變量與類變量相似,不同之處在于它們的值在對象的特定實(shí)例中是局部的。例如,如果一個(gè)類包含一個(gè)稱為@total的實(shí)例變量,則如果該對象的一個(gè)實(shí)例更改了@total的當(dāng)前值,則該更改僅對進(jìn)行更改的對象是有效的,對于其他的對象是無效的。

這是一個(gè)創(chuàng)建包含實(shí)例變量的對象的例子(Ruby的類章節(jié)中會詳細(xì)講解類的創(chuàng)建):

# 這個(gè)是Song類,里面有一個(gè)setter方法,可以給@title實(shí)例變量賦值。
class Song
  def title= name
    @title = name
  end
end

# 創(chuàng)建song1,和song2兩個(gè)對象
song1 = Song.new
song2 = Song.new

# song1的title為 Welcome my Ruby world
song1.title = "Welcome my Ruby world"
song2.title = "World is perfect"

# 打印兩個(gè)對象
p song1
p song2

# ---- 輸出結(jié)果 ----
#<Song:0x007faa5e894648 @title="Welcome my Ruby world">
#<Song:0x007faa5e894620 @title="World is perfect">

解釋:從打印結(jié)果我們可以看到,我們實(shí)例化 song1 和 song2 后傳入的title不同,他們的@title發(fā)生了改變,但是彼此之間不會互相影響。

在 Ruby 中,實(shí)例變量是通過在變量名稱前添加一個(gè)@符號來聲明的。

實(shí)例:

@total = 10

Tips:實(shí)例變量默認(rèn)值為 nil。

3.4 局部變量

它們的名稱始終以小寫字母(a-z)或下劃線(_)開頭。

實(shí)例:

loopcounter = 10
_LoopCounter = 20

注意事項(xiàng)

在Ruby中我們調(diào)用方法(詳情請查看:Ruby的方法)可以省略括號(),這就會導(dǎo)致變量名和方法名可能重名的問題。

實(shí)例:

some_thing = 'I am a variable' # 現(xiàn)在我是一個(gè)變量

# 定義了一個(gè)some_thing的方法
def some_thing
  puts 'I am a method'
end

puts some_thing

# ---- 輸出結(jié)果 ----
I am a variable

解釋:當(dāng)變量名和方法名稱一致的時(shí)候,優(yōu)先使用變量名。

如果我們也要調(diào)用方法的話,要在變量名后面增加一個(gè)括號()。

實(shí)例:

puts some_thing()

# ---- 輸出結(jié)果 ----
I am a method

當(dāng)局部變量沒有定義時(shí)被調(diào)用會拋出異常。

puts undefined_variable

# ---- 輸出結(jié)果 ----
ruby.rb:1:in `<main>': undefined local variable or method `undefined_variable' for main:Object (NameError)

局部變量在聲明它們的代碼結(jié)構(gòu)中是局部的,例如,在方法或循環(huán)內(nèi)聲明的局部變量無法在該循環(huán)或方法外訪問。(在作用域章節(jié)中會詳細(xì)介紹)

loopcounter = 10
def a_method
  puts loopcounter
end
a_method

# ---- 輸出結(jié)果 ----
ruby.rb:3:in `a_method': undefined local variable or method `loopcounter' for main:Object (NameError) from ruby.rb:5:in `<main>'

解釋:因?yàn)樵?code>a_method方法的作用域中沒有找到loopcounter這個(gè)局部變量,所以拋出了異常。

3.5 常量

Ruby 常量是一旦分配了值就不應(yīng)更改的值。我之所以這樣說是因?yàn)?Ruby 與大多數(shù)編程語言的不同之處在于,它允許在聲明常量后更改常量值,Ruby 解釋器會在更改值后給出警告。常量的每個(gè)字母都應(yīng)該大寫,多個(gè)單詞使用下劃線(_)分隔。

它可以在類或模塊內(nèi)聲明的常量可在該類或模塊的上下文中的任何位置使用。在類或模塊外部聲明的常量將分配給全局范圍。

實(shí)例:

TOTAL_COUNT = 10

4. 小結(jié)

本章節(jié)中我們了解了在 Ruby 中一共有 4 種變量:局部變量、實(shí)例變量、類變量、全局變量,他們的作用范圍分別方法、對象、類、全局。除此之外在 Ruby 中,常量是一種不應(yīng)更改的值,通常在類或模塊使用。