字符串Literals

字符串對象保存有序的字節(jié)序列,通常是字符,通常形成人類可讀文本片段。它們'是所有編程語言中非常常見的對象類型,Ruby有許多**和低級方法來創(chuàng)建,訪問和操作字符串對象。

字符串通常使用字符串文字創(chuàng)建。文字是Ruby語言中創(chuàng)建特定類型對象的特殊語法。例如,23是創(chuàng)建Fixnum對象的文字。至于字符串literals,有幾種形式。

16單引號和雙引號字符串17 18

大多數(shù)語言都有類似于此的字符串文字,所以這可能很熟悉。引號的類型,'(單引號,撇號或硬引號)和"(雙引號或軟引號)用于包圍字符串literals,它們之間的任何內(nèi)容都將變成字符串對象。以下示例演示了這一點(diǎn)。

但單引號和雙引號之間存在一些差異。雙引號或軟引號使一些魔術(shù)能夠在場外發(fā)生。最有用的是在字符串內(nèi)部插值,用于將變量的值插入字符串的中間。這是通過使用##{…}序列來實(shí)現(xiàn)的。以下示例將要求您提供姓名并歡迎您,使用插值將您的姓名插入到打印'的字符串文字中。

請注意,任何代碼都可以在大括號內(nèi),而不僅僅是變量名稱。Ruby將評估該代碼,無論返回什么,它都會嘗試將其插入字符串中。所以你可以很容易地說"你好老年人健康知識講座#{gets.chomp}",忘記name變量。但是,最好不要在大括號內(nèi)放長表達(dá)式。

單引號,撇號或硬引號更具限制性。罪之里面單引號,Ruby除了轉(zhuǎn)義單個引號字符和反劃線本身(分別\'\ \)外,不會執(zhí)行插值或逃逸序列。如果您不打算使用插值,建議多次使用單引號。

以下示例將嘗試在單引號內(nèi)插入變量。

如果你運(yùn)行這個你'不會出錯,但會打印什么?

科普_1

插值序列未通過。

我什么時候應(yīng)該使用單引號和雙引號

這是一個風(fēng)格問題。有些人一直喜歡使用雙引號,除非它們變得不方便。其他人寧愿使用單引號,除非插值行為是有意的。關(guān)于始終使用雙引號,沒有任何固有的危險(xiǎn),但它確實(shí)使一些代碼更容易閱讀。您不需要'如果知道代碼中沒有插值,則在讀取代碼時需要讀取字符串,因?yàn)槟雷址旧頃a(chǎn)生'沒有任何副作用。所以你使用哪個字符串文字形式取決于你,這里沒有真正的對錯方式。

逃逸序列

如果用字符串文字表示要包含引用字符,該怎么辦?例如,字符串&##34;Steve said"Moo!"贏得't工作。也不會'可以'觸摸這個!'。這兩個字符串都在字符串內(nèi)部包含引用字符,有效地結(jié)束字符串文字并導(dǎo)致語法錯誤。您可以切換引用字符,如'Steve said"Moo!"',但這并不能真正解決問題。相反,您可以逃脫字符串中的任何引用字符,它將失去其特殊含義(在這種情況下,特殊含義是關(guān)閉字符串)。

為了逃脫一個角色,用ba預(yù)先結(jié)束它c(diǎn)kslach字符。反斜杠字符告訴Ruby忽略下一個字符可能具有的任何特殊含義。如果它'是匹配的引用字符,請不要't結(jié)束字符串。如果它'是一個散列符號,請開始一個插值塊。以下示例演示了使用反斜杠來逃脫特殊字符。

反斜杠字符可用于從以下字符中刪除任何特殊含義,但令人困惑的是,它也可用于表示雙引號字符串中的特殊行為。這些特殊行為中的大多數(shù)都與插入無法直觀輸入或表示的字符和字節(jié)序列有關(guān)。并非所有字符串都是字符串,或者可能包含用于終端而不是用戶的控制序列。Ruby使您能夠使用反斜杠逃逸字符插入這些類型的字符串。

  • \ n-一個newline字符。puts方法會自動執(zhí)行此操作,但如果要在字符串的中間插入一個,或者字符串用于puts方法以外的其他內(nèi)容,則可以使用此方法在字符串中插入新行。
  • \ t-制表符字符。制表符字符將光標(biāo)移動到(在大多數(shù)終端上)到8的倍數(shù),因此這對于顯示表格數(shù)據(jù)非常有用。但是,有更好的方法可以做到這一點(diǎn),使用制表符字符被認(rèn)為有點(diǎn)古老或hackish。
  • \ nnn-反斜杠后跟3個數(shù)字將表示由3個八位數(shù)字表示的ASCII字符。為什么octal?主要是出于歷史原因。
  • \ xnn-反斜杠,x和2個十六進(jìn)制數(shù)字。與octal版本相同,僅具有十六進(jìn)制數(shù)字。

你可能永遠(yuǎn)不會使用其中的大部分,但知道它們存在。并且還請記住,它們只能用雙引號字符串表示。

下一頁討論多行字符串和字符串literals的替代語法。

多行字符串

大多數(shù)語言不允許多行字符串literals,但Ruby允許。'不需要結(jié)束字符串并為下一行附加更多字符串,Ruby使用默認(rèn)語法處理多行字符串literals。

替代語法

與大多數(shù)其他literals一樣,Ruby為字符串literals提供了另一種語法。例如,如果您在literals中使用了很多引用字符,則可能需要使用此語法。當(dāng)你使用這個語法是一個風(fēng)格問題時,它們通常不需要字符串。

要使用替代語法,請對單個帶引號的字符串%q{…}使用以下序列。同樣,對雙引號字符串%Q{…}使用以下語法。此備用語法遵循與其"normal"cousins相同的規(guī)則。此外,請注意,您可以使用任何希望的字符而不是大括號。如果使用括號,方括號,角括號或括號,則匹配字符將以文字結(jié)尾。如果你不想使用匹配的字符,你可以使用任何其他符號(不是字母或數(shù)字)。文字將用另一個相同的符號封閉。以下示例向您展示了使用此語法的幾種方法。

備用語法也可用作多行字符串。