Ruby的基础语法(一):基本数据类型

Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这个几个特殊值,同时嗨哟两种重要的数据结构Array和Hash。

1.数字类型

Ruby中所有的数字都是Numberic类的实例,所有整数Integer的实例。Fixnum和Bignum之间的转换是透明的,Ruby利用Float来近似表示实数。

在这里多补充一下Fixnum和Bignum方便认识,Fixnum和Bignum是Integer的子类

Fixnum:内部用固定长度来实现的整数,能够高效地处理比较小的整数。
Bignum:多倍长的整数,可以用来定义任意大的整数。

程序中的整数一般都是在Fixnum范围内的,如果超过了Fixnum的范围,Ruby就会自动将其转换为Bignum类。

单纯的数字表示10进制,0b开头表示2进制,0或者0o开头表示8进制,0d开头表示10兼职,0x开头表示16进制。数字中的_会被自动忽略,不会影响数字值的显示。

2.字符串
  • 单引号
    单引号引入字符串面量来表示字符串,其中如果表示单引号,只需要在之前加入一个反斜线。就是C语言中的转义字符的意思
    例如:
puts  'it\'s just a test'

输出结果:

it's just a test

如果表示反斜线,那就需要写两个反斜线

puts  'this is a \\'

输出结果:

this is a \

单引号字符串可以跨行,得到的字符串会包含换行符,也不能通过反斜线来转椅行尾的换行符。

puts 'This is a long string literal \
that include a backslash and a new line.'

输出结果:

This is a long string literal
that include a backslash and a new line.

如果不希望加入换行,那么只需要将其划分成为相邻的字符串字面量,同时在其尾部加入反斜线转义末尾的换行符就可以了

puts 'The three literal are ' \
'concatenated into one by interpreter ' \
'The resulting string contains no newlines.'

输出结果:

The three literal are concatenated into one by interpreter The resulting string contains no newlines.

  • 双引号
    双引号引用的字符串字面量则支持更多的转义,比如换行\n,制表符\t和双引号"。同时支持Ruby特有的“字符串内插”
puts "The result is #{8 + 9}"

输出结果:

The result is 17

3.数组

Ruby数组可以用负值进行索引,如果赋值操作时使用负值超出范围会报错
ruby中支持一种更加通用的数组字面量特殊语法

puts %W|aaaaa ( [ { < |

输出结果:

aaaaa
(
[
{
<

puts %w[this is a test]

输出结果:

this
is
a
test

通过Array.new 构造函数来构造数组

array0 = Array.new #创建一个数组,返回[]
array1 = Array.new(20) #创建一个数组20个空间
array2 = Array.new(4,"ccc") #创建一个数组4个元素,每个都是ccc
array3 = Array.new(10){|e| e = e*2} #创建一个数组10个元素 公差是2 首项0
array4 = Array.[](1,2,3,4) #创建一个数组元素是1,2,3,4
array5 = Array[1,2,3,4,5] #创建一个数组元素是 1,2,3,4,5
array6 = Array(0..9) #创建一个数组元素是0-9
#输出结果可想而知
4.哈希

Ruby里的hash采用一种哈希表的数据结构来实现。可以理解为OC中的字典存储。那些作为哈希健的对象必须有一个hash的方法,该方法返回后一个Fixnum码的哈希码。如果两个键相同,那么它们必须具有相同的哈希码。不相等的键也可以拥有相同的哈希码,但是仅当哈希表有极少的重复事,其效率才是最高的。

# 空的哈希
months = Hash.new
# 默认值的哈希
months = Hash.new( "month" )
或
months = Hash.new "month"
# 有值的哈希
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"

输出结果:

100
200

# 字面量特殊语法
numbers = {"one" => 1, "two" => 2}  
puts  "#{numbers['one']}"
puts "#{numbers['two']}"

输出结果:

1
2

5.符号

通过在一个标识符或字符串前面添加冒号的方式表示一个符号字面量。
Symbol看起来像一个没有引号的字符串前加了个冒号:myname 当然你也可以用冒号加引号的形式声明带空格的symbol。:'my name'or :"my name" Symbol是不变的,不可以像其他变量一样对它进行赋值运算。比如这样的写法是错误的:myname = "Tom"。 相反Symbol可以作为值赋给其他变量比如mystring = :myname。

例如:

:symbol
:"symbol"
:'another'
s = "string"
sym = :"#{s}"

6.True、False、Nil

True、False 和 Nil 分别是 TrueClass、FalseClass 和 NilClass 的单键实例。Ruby 中并没有 Boolean 类。
当 Ruby 需要一个布尔值时,nil 表现为 false,而 nil 和 false 之外的所有值都表现为 true。

o = nil
if o == nil
puts "o 为nil"
end

或者以下这种表达方式也可以

o = nil
if o.nil?
puts "o 为nil"
end

输出结果:

o 为nil

7.补充以下输出3种方式:
  • puts方式
puts "123","456"

自动换行输出结果:

123
456

  • print方式
print "123","456"

输出结果不换行:

123456

  • p方式
p "123","456"

输出结果自动换行:

"123"
"456"

从上面可以看出p的输出方法和上面两个不一样,要主要输入结果值

8.打印数据类型的方法
t = "123"
puts t.class

输出结果是

string

参考文章在这里:Ruby数据类型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352