在Ruby中,一切都是对象。更精确地说,Ruby中的一切都是一个具有完整功能的对象。因此,在Ruby中,<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: 0px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">数字</nobr>4,定点数3.14和字符串"Hi"都是对象。显然,它们是有点"特殊"的,因为你不必使用new方法来创建它们。代之的是,你使用例如"literal 4"这样的形式来创建一个代表数字4的对象的实例。
然而,对于绝大多数人来说,学习一种新的编程<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">语言</nobr>时,首先理解该语言提供的"标准"类型是非常有用的。所以,在这一节,我们先探讨数字类型,字符串类型,布尔类型和另外一些基本的Ruby数据类型。
数字类型
实质上,Ruby中的数字被分为整数和浮点数两大类。其中,整数又被进一步细分为"常规大小"的整数和大型整数。因为在Ruby中一切都是对象,所以整数和浮点数都是按类来定义的(见图1)。从图1看出,Numeric是所有数字类型的基类,Float和Integer类是Numeric的子类。Fixnum和Bignum都是Integer的子类型-它们分别定义了"常规大小"的整数和大型整数。

图1.Ruby的数字类型类继承图
Literal用来描述这些类的实例。下面的在交互式Ruby外壳(irb)中的代码显示了Float,Fixnum和Bignum的literal实例。注意,可以在literal上进行方法调用(在此,是指类方法)。
irb(main):001:0>3.class
=>Fixnum
irb(main):002:0>3.4.class
=>Float
irb(main):003:0>10000000000000000000.class
=>Bignum |
还有另外一些<nobr oncontextmenu="return false;" onmousemove="kwM(1);" id="key1" onmouseover="kwE(event,1, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">语法</nobr>用来创建数字类型,显示于下面的代码列表中。字母E可以用来描述以指数标志的数字。数字的前面加上0代表这是一个八进制数,加上0x代表这是一个十六进制数,而0b代表是一个二进制数。为清晰起见,下划线可以用作数字中的分隔符号。注意,当写literal时,不要用逗号作为分隔符号。在一些情况中,这实际上能生成一个数组,我们将在后面讨论。最后,在一个字符(或Ctrl或元字符的组合)前面的一个问号将会创建一个Fixnum的实例,相应于字符的ASCII字符/逃逸序列值。
<
irb(main):001:0>3.14E5#指数标志
=>314000.0
irb(main):002:0>054#八进制
=>44
irb(main):003:0>0x5A#十六进制
=>90
irb(main):004:0>0b1011#二进制
=>11
irb(main):005:0>10_000#10,000,用下划线隔开
=>10000
irb(main):006:0>i=10,000#创建一个数组而不是10000Fixnum
=>[10,0]
irb(main):007:0>i.class
=>Array
irb(main):008:0>?Z#FixnumASCII值
=>90
irb(main):009:0>?Z.class
=>Fixnum
irb(main):010:0>?\C-s#Control-s的值ASCII
=>19 |
Fixnum和Bignum实例间的真实差别是什么?Fixnum整数可以被存储在机器中的一个字(通常16,32或64位)中,但减去1个位;而Bignum实例是超出<nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="key5" onmouseover="kwE(event,5, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">固定</nobr>存储空间的整数。当然,作为开发者,你不必担心整数的大小(见下面的例子),由Ruby负责为你实现Fixnum和Bignum之间的自动转换!
irb(main):001:0>i=4
=>4
irb(main):002:0>i.class
=>Fixnum
irb(main):003:0>i=i+100000000000000
=>100000000000004
irb(main):004:0>i.class
=>Bignum
irb(main):005:0>i=i-100000000000000
=>4
irb(main):006:0>i.class
=>Fixnum |
字符串
在Ruby中,字符串是任意顺序的字节。通常,它们是一个字符序列。在Ruby中,可以使用一个literal或new方法来创建String类的实例。
irb(main):001:0>s1="HelloWorld"
=>"HelloWorld"
irb(main):002:0>s2=String.new("HelloWorld")
=>"HelloWorld" |
当然,String中定义了许多方法(和操作符)。另外,可以使用单引号或双引号来指定一个字符串。双引号情况下允许串中加入逃逸字符并能够嵌入待<nobr oncontextmenu="return false;" onmousemove="kwM(4);" id="key4" onmouseover="kwE(event,4, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">计算</nobr>的表达式。在单引号串情况下,你看到的就是串中的实际内容。为了更好的理解,请看下列例子。
irb(main):001:0>str1='a\nstring'
=>"a\\nstring"
irb(main):002:0>str2="a\nstring"
=>"a\nstring"
irb(main):003:0>putsstr1
a\nstring
=>nil
irb(main):004:0>putsstr2
a
string
=>nil
irb(main):005:0>'trytoadd#{2+2}'
=>"trytoadd\#{2+2}"
irb(main):006:0>"trytoadd#{2+2}"
=>"trytoadd4"
irb(main):007:0>this="that"
=>"that"
irb(main):008:0>'whensinglequoterights#{this}'
=>"whensinglequoterights\#{this}"
irb(main):009:0>"doublequoterights#{this}"
=>"doublequoterightsthat" |
请注意,在显示之前,双引号中的文本是如何被计算的,其中包括了逃逸符号(\n)和表达式(#{2+2})。
除了使用单引号和双引号来定义一个字符串literal外,在Ruby中,还有另外的方法可以表达literal。一个百分号和小写或大写字母Q可以用来表达一个字符串,分别相应于单引号或双引号风格。
irb(main):001:0>%q@thisisasinglequotestring#{2+2}here@
=>"thisisasinglequotestring\#{2+2}here"
irb(main):002:0>%Q@thisisadoublequotestring#{2+2}here@
=>"thisisadoublequotestring4here" |
注意,跟随在q%或Q%后面的字符分别定义了字符串literal的<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">开始</nobr>和结束。在本例中,@符号用作字符串开始与结束的限界符号。
还应该注意,Ruby并没有区分一个字符串和一个字符。也就是说,没有适用于单个字符的特定的类-它们仅是一些小的字符串。
布尔类型
最后,让我们再看一下布尔类型。在Ruby中,有两个类用于<nobr oncontextmenu="return false;" onmousemove="kwM(7);" id="key7" onmouseover="kwE(event,7, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">表达</nobr>布尔类型:TrueClass和FalseClass。每个这些类仅有一个实例(一个singleton):也就是true和false。这些是可在Ruby的任何地方存取的全局值。还有一个类NilClass。NilClass也仅有一个实例nil-表示什么也没有。然而,在布尔逻辑中,nil是false的同义词。
irb(main):001:0>true|false
=>true
irb(main):002:0>true&false
=>false
irb(main):003:0>true|nil
=>true
irb(main):004:0>true&nil
=>false |
·
Visual C++.NET中的字符串转换方法
<iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-1572879403720716&dt=1190352381595&hl=zh-CN&lmt=1188182159&alternate_ad_url=http%3A%2F%2Fwww.qqread.com%2F0000js%2Fgoogle300.htm&format=300x250_as&output=html&correlator=1190352381595&channel=0168087865&url=http%3A%2F%2Fwww.qqread.com%2Fsoft-engineering%2Fe874124102_2.html&color_bg=F9FCFE&color_text=000000&color_link=1F3A87&color_url=FF6666&color_border=F9FCFE&ad_type=text_image&ref=http%3A%2F%2Fwww.qqread.com%2Fsoft-engineering%2Fe874124102.html&cc=100&ga_vid=98944056.1188180349&ga_sid=1190349780&ga_hid=1695955256&ga_fc=true&flash=9&u_h=1024&u_w=1280&u_ah=990&u_aw=1280&u_cd=32&u_tz=480&u_his=1&u_java=true" frameborder="0" width="300" scrolling="no" height="250" allowtransparency="allowtransparency"></iframe>
正规表达式
大多数<nobr oncontextmenu="return false;" onmousemove="kwM(2);" id="key2" onmouseover="kwE(event,2, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">程序</nobr>语言中都使用正规表达式。基于许多脚本语言的Ruby也广泛地使用正规表达式。我的一个同事曾经说"正规表达式太复杂了。"换句话说,你需要花费一些时间来学习正规表达式。在本文中,你仅能一瞥Ruby正规表达式的威力。在程序开发中,你不必一定使用正规表达式,但是如果使用这种工具,你的编码将更为紧凑而容易。而且,如果你想成为一名Ruby大师,你必须要花费其它时间来研究它。
在下面的例子中,Ruby中的正规表达式是在Tiger或菲Phil之间定义的。
现在你可以在一个条件或循环语句中使用带有一个匹配操作符("=~")的正规表达式来匹配或查找其它的字符串。
irb(main):001:0>
golfer="Davis"
ifgolfer=~/Tiger|Phil/
puts"Thisisgoingtobealongdrive."
else
puts"Andnowadriveby"+golfer
end
=>"Davis" |
下面是另一个稍微复杂些的正规表达式:
/[\w._%-]+@[\w.-]+.[a-zA-Z]{2,4}/ |
你能够猜出这个表达式代表什么意思吗?它相应于一个电子邮件地址。这个正规表达式可以用来校验<nobr oncontextmenu="return false;" onmousemove="kwM(4);" id="key4" onmouseover="kwE(event,4, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">电子</nobr>邮件地址。
irb(main):001:0>
emailRE=/[\w._%-]+@[\w.-]+.[a-zA-Z]{2,4}/
email="jwhite@interechtraining.com"
ifemail=~emailRE
puts"Thisisavalidemailaddress."
else
puts"thisisnotavalidemailaddress."
end
这是一个有效的电子邮件地址。
irb(main):002:0>
email="###@spammer&&&.333"
ifemail=~emailRE
puts"Thisisavalidemailaddress."
else
puts"thisisnotavalidemailaddress."
end |
这不是一个有效的电子邮件地址。
图2把电子邮件正规表达式分解开来。你已看到,正规表达式<nobr oncontextmenu="return false;" onmousemove="kwM(6);" id="key6" onmouseover="kwE(event,6, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">语言</nobr>是相当丰富的,但在此不多详述。有关正规表达式的更多信息请参考http://www.regular-expressions.info。

图2.电子邮件正规表达式
注意,在Ruby中正规表达式也是一种对象。在下面的代码示例中,一个正规表达式实例(派生自类Regexp)作为String<nobr oncontextmenu="return false;" onmousemove="kwM(5);" id="key5" onmouseover="kwE(event,5, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">方法</nobr>的一个参数(gsub)以达到使用"glad"来替换和"happy"与"joy"之目的。
irb(main):001:0>
quote="Iamsohappy.Happy,happy,joy,joy!"
regx=/(h|H)appy|joy/
quote.gsub(regx,"glad")
=>"Iamsohappy.Happy,happy,joy,joy!"
=>/(h|H)appy|joy/
=>"Iamsoglad.glad,glad,glad,glad!" |
当你在正规表达式对象上使用=~操作符时,你能够得到例如匹配模式串的索引等信息。
irb(main):001:0>/Tiger|Phil/=~"EyeOfTheTiger"
=>8 |
如果你曾编写过大量有关字符串的程序,你就会知道Ruby中的正规<nobr oncontextmenu="return false;" onmousemove="kwM(7);" id="key7" onmouseover="kwE(event,7, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">表达</nobr>式是非常有力量的。因此,我建议在较深入地用Ruby开发你的第一个程序前,你应该全面地探讨一下Ruby中的正规表达式。当然,你可以参考本文相应的源码文件,其中包含了大量的正规表达式。
范围
在Ruby中,一个很不平常但是非常有用的概念就是范围(range)。一个范围是一个值序列。例如,字符a到z就可以定义在英语字母表中的所有的小写字母。另外一个范围的例子是整数1到10。一个范围能从任何类型的对象中创建,假定对象的类型允许使用Ruby的操作符(<=>)和succ方法进行比较。根据<=>操作符左边的操作数是否小于,等于或大于<=>操作符右边的操作数,<=>操作符将分别返回-1,0或+1。例如,"A"<=>"B"将返回-1。运行于整数4上的succ方法(4.succ)将返回5。
可以使用Range类的new方法或特殊的<nobr oncontextmenu="return false;" onmousemove="kwM(3);" id="key3" onmouseover="kwE(event,3, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">标志</nobr>来创建一个范围。下面是在irb中分别使用括号和点速记标志创建的两个相同的范围(表示所有的大写字母)。
irb(main):001:0>r1=Range.new("A","Z")
=>"A".."Z"
irb(main):002:0>r2=("A".."Z")
=>"A".."Z" |
当创建一个范围时,必须指定<nobr oncontextmenu="return false;" onmousemove="kwM(0);" id="key0" onmouseover="kwE(event,0, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">开始</nobr>值和结束值。在上面的情况中,A作为开始值,Z作为结束值。当创建一个范围时,你还可以指示是否这个范围应该包括或不包括末尾元素。默认情况下,如上例所示,范围包括末尾元素。为了排除结束元素,你可以使用new方法的排除参数(置为true)或如下所示的3个点的速记标志。
irb(main):001:0>r1=Range.new("A","Z",true)
=>"A"..."Z"
irb(main):002:0>r2=("A"..."Z")
=>"A"..."Z"
irb(main):003:0>r1.include?"Z"
=>false
irb(main):004:0>r2.include?"Z"
=>false |
上面的示例中在范围上调用的include?方法显示是否其参数是范围的一个成员。上例中,"Z"不是范围的一个元素。这个方法还有一个与之等价的操作符"==="-它实现相同的功能。
irb(main):005:0>r2==="Z"
=≫
false |
范围被应用在Ruby编程的许多方面。它们有两种特定的使用:作为生成器(generator)和谓词(predicate)。作为一个生成器,在范围上的每个方法允许你遍历该范围中的每个元素;例如,你想确定在一个K字节范围中的实际字节数。下面在irb中运行的代码使用了一个范围作为K字节到字节的生成器。
irb(main):008:0>
kilobytes=(1..10)
kilobytes.each{|x|putsx*1024}
=>1..10
1024
2048
3072
4096
5120
6144
7168
8192
9216
10240 |
在Ruby中,条件逻辑范围可以被用作谓语(predicate),通常借助于操作符===的帮助。例如,你可以使用一个范围谓词来<nobr oncontextmenu="return false;" onmousemove="kwM(1);" id="key1" onmouseover="kwE(event,1, this);" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="return kwC();" onmouseout="kwL(event, this);" target="_blank">测试</nobr>一个相对于有效的端口号(0~65535)和保留的端口号(0~1024,不包括1024)的整数参考。
irb(main):001:0>
proposedPort=8080
validPorts=(0..65535)
reservedPorts=(0...1024)
if(validPorts===proposedPort)&!(reservedPorts===proposedPort)
puts"Proposedportisoktouse."
else
puts"Proposedportisnotallowedtobeused."
end
=>8080
=>0..65535
=>0...1024 |
上例的结果是,建议的端口号可以使用。
另外,范围也可以用于存取数据结构(如数组和哈希表)中的元素。
分享到:
相关推荐
Ruby是一种面向对象的动态编程语言,它以其简洁的语法和强大的功能受到许多开发者的喜爱。在Ruby的世界里,字符串操作是常见的任务之一。为了增强字符串处理能力,开发者们创建了许多库,其中Stringex是一个非常实用...
3. 面向对象:Ruby中的一切几乎都是对象,包括数字和字符串。这种全面的面向对象特性让编程更加模块化和易于管理。 4. 纯净性:Ruby没有全局变量的概念,每个变量都属于一定的作用域,这有助于避免全局命名空间的...
其他编程语言如C#、PHP、Ruby等也有类似的方法来实现字符串截取,如C#的`Substring()`,PHP的`substr()`,Ruby的`[]`运算符等。 7. **常见应用场景**: - 数据解析:从日志文件、CSV文件或XML文件中提取特定信息...
Ruby提供了多种内置的数据类型,包括数组(Array)、哈希(Hash)、数字(Number)、字符串(String)、范围(Range)、符号(Symbol)和正则表达式(Regexp)。这些类型为处理数据提供了强大的工具。 ### 代码块和...
Ruby是一种纯面向对象的编程语言,拥有面向对象编程的三大特性:封装、继承和多态。类名在Ruby中必须以大写字母开始,象征着类名是常量。Ruby是一种基于行的语言,通常情况下,每遇到一个换行符就意味着一个语句的...
Ruby 是一种简洁、高效且具有强大功能的编程语言。它最初由日本程序员松本行弘(Yukihiro Matsumoto)于1995年设计并开发。Ruby 的设计理念强调程序员的生产力和代码的可读性,并且它具有面向对象的特性,支持多种...
例如,当尝试将字符串和数字相加时,Ruby会自动将数字转换为字符串再进行拼接,而无需显式的类型转换,这大大提高了代码的简洁性和可读性。 然而,这种灵活性也可能带来潜在的问题,如类型错误难以在编译时发现,...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本中文教程旨在帮助初学者快速掌握Ruby的基础知识,让编程变得简单易学。 一、Ruby语言基础 1. 变量:Ruby中的变量...
Ruby是一种高级的、动态类型的编程语言,它的设计哲学强调简洁性和表达性。在Ruby中,一切都是对象,这使得它成为一种纯面向对象的语言。下面我们将深入探讨Ruby的语法和语言特性,包括基础语法、编程模型、流程控制...
面向对象:在 Ruby 中,一切皆对象,包括数字、字符串、函数等,每个对象都有自己的方法和属性。Ruby 的面向对象模型是其设计的核心,支持类、模块、继承、多态等面向对象编程的特性。 动态类型:Ruby 是一种动态...
在各种编程语言中,替换字符串的特定字符是一项基础且重要的功能。这个压缩包“替换字符串的特定字符源代码.zip”很可能包含了不同编程语言实现这一功能的源代码示例。下面,我们将探讨这个主题,深入理解字符串替换...
2. **面向对象**:Ruby是完全的面向对象语言,所有数据都是对象,包括基本类型如数字和字符串。它支持类、继承、封装、多态等面向对象概念,并提供了丰富的元编程能力。 3. **块、proc和lambda**:Ruby中的块是一段...
在本主题"10.28 yield正则表达式替换字符串"中,我们将深入探讨如何使用正则表达式来替换字符串,并结合Ruby编程语言中的yield关键字进行相关操作。 首先,正则表达式允许我们用一种简洁的方式来定义字符串的模式。...
- **面向对象**:一切在Ruby中都是对象,即使是基本数据类型如数字或字符串也不例外。 - **动态性**:Ruby是一种动态类型的语言,变量不需要事先声明类型。 - **可扩展性**:Ruby语言允许用户定义新的语法结构,这...
在Ruby中,一切都是对象,包括基本类型如数字、字符串和布尔值。它支持类、对象、继承、封装和多态等面向对象编程的关键概念。通过定义类,你可以创建具有特定属性和行为的对象,这些行为由方法来实现。Ruby的类定义...
1. **对象模型**:Ruby中的所有东西都是对象,包括数字、字符串和方法调用。理解Ruby的对象模型是进行元编程的基础。通过了解对象是如何创建、如何存储数据以及如何交互的,我们可以更灵活地控制程序的行为。 2. **...
- 面向对象:一切皆为对象,包括数字、字符串等。 - 动态类型:变量可以在运行时改变类型。 - 可扩展性:可以轻松地通过C语言扩展Ruby的功能。 - 简洁易读:语法简洁明了,易于阅读和编写代码。 - **跨平台性**...
- **定义**:Ruby是一种简单而强大的面向对象编程语言,由日本人松本行弘(Yukihiro Matsumoto)于1995年设计并发布。 - **特点**: - 简洁性:Ruby的设计理念之一就是简洁易读,尽可能减少不必要的复杂性。 - ...
1. **Ruby基础**:Ruby的基础语法包括变量(局部、实例、类和全局),数据类型(字符串、数字、数组、哈希等),控制结构(条件语句、循环)以及方法定义。 2. **面向对象编程**:Ruby是完全面向对象的语言,每个...