Ruby基础知识小结

1. 简单描述OOP编程中对象、继承、多态概念。 正则表达式

(1)对象就是人们在编写代码来解决现实世界中的问题时,要进行研究的任何事物。 编程

(2)继承是描述客观世界的类之间的一种关系,是子类自动共享父类的数据结构和方法而且在新加的子类中有不一样于父类的特征和能力。 数组

(3)多态是不一样的对象,收到同一消息能够产生不一样的结果。例如,猫和狗两个子类都继承动物这个父类的“叫”的方法,可是猫“叫”和狗“叫”是不一样的,即不一样的结果。 数据结构

2. 列成Ruby中全部的关键字。 less

类别函数

关键字单元测试

模块定义测试

moduleui

类定义this

class

方法定义

def,undef

检查类型

defined?

条件语句

if,then,else,elsif,case,when,unless

循环语句

for,in,while,until,next,break,do,redo,retry,yield

逻辑判断

not,and,or

逻辑值

true,false

空值

nil

异常处理

rescue,ensure

对象引用

super,self

块的起始结束

begin/end

嵌入模块

BEGIN,END

文件相关

__FILE__,__LINE__

方法返回

return

别名

alias

3. 归纳Ruby中变量和标识符的命名规则。

(1) 变量的定义无需指定类型,只能包含字母、数字、下划线,但只能以字母或下划线开头。

(2) 经过区分Ruby变量名的首字符来区分它是局部变量、实例变量、类变量和全局变量,其中类变量以@@开头,实例变量以@开头,全局变量以$开头。

1. 比较下面各组符号的优先级。

Ruby的运算符列举如表所示(按照优先级从高到低的顺序):

clip_image002

a) ::和[]

::的优先级高于[]

b) >= 和==

>=的优先级高于==

c) ?:和||

逻辑或||优先级高于三元运算符?=

d) +和&&

+的优先级高于逻辑与&&

2. 声明一个字符串实例化,实例名为str,初始值为”this is a string.”。请用4种方法分别对str进行初始化。

答:代码以下

#Method1

str ="this is a string."

puts str

#Method2

str1 = str

puts str1

#Method3

str2 = String.new("this is a string.")

puts str2

#Method4

str3 = String.new

str3 << "this is a string."

puts str3

其运行结果以下:

clip_image004

3. 写一个程序,把字符串”this is a string.”中的”is ”所有替换成”si”

答:程序代码和运行结果以下

clip_image006

4. 写一个程序,删除字符串”FujitsuManual”中重复字符”u”

答:程序代码和运行结果以下

clip_image008

5. 解释正则表达式中以下标记的含义:

$, \w, \b,{m,n},?,*,\d,\s,[],^, . ,+

元字符

说明

$

匹配行尾

\w

匹配字母或数字或下划线或汉字

\b

在括号外时,匹配单词的边界;在括号内匹配回格符 (backspace)

{m,n}

匹配至少n次,最多m次

?

匹配零次或一次

*

匹配零次或屡次

\d

匹配数字

\s

匹配任意的空白符

[…]

匹配方括号内的全部单个字符

^

匹配字符串的开始,即行首

.

匹配除换行符之外的任意字符

+

匹配至少一次

 

1. 举例说明正则表达式的三种初始化方法。

答:代码以下

#举例说明正则表达式的三种初始化方法,实质都是新建了一个Regexp的类

#Method1 在//之间,要进行转义

pattern = /Fu/

puts pattern =~ "Fujitsu" # =~返回第一个匹配的位置

#Method2 在%r{}内,不用进行转义

pattern =%r{u}

puts pattern =~ "Fujitsu"

#Method3 Regexp.new()内,不用进行转义

pattern = Regexp.new("ji")

puts pattern =~ "Fujitsu"

其运行结果以下:

clip_image002[4]

2. 写一个正则表达式,用来匹配身份证号码。

答:代码以下

#一个简单的身份证验证的正则表达式:15位号码应全为数字,18位号码末位能够为数字或X

#没有使用

regex=/(^\d{15}$)|(^\d{17}([0-9]|[xX])$)/

puts regex.match("511028123411111234")

puts regex.match("51102812341111123X")

puts regex.match("51102812341111123x")

puts regex.match("511028123456789")

puts regex.match("5110281234111112a4")

puts regex.match("511028123")

其运行结果以下:

clip_image004[5]

 

1. Ruby中用2、8、十六进制表示整数时,分别用什么前缀来表示

答:

(1) 二进制前缀:0b或0B

(2) 八进制前缀:以0开头并且后面没有其余字母的整数为八进制

(3) 十六进制前缀:0x或0X

例如:

clip_image002[6]

2. rand函数的做用是什么

答:

全局函数Kernel.rand产生随机数。若不带参数或当参数n属于(-1,1)时,它返回一个大于0.0 而小于1.0的伪随机浮点数。若给定一个整数参数max,它返回一个大于0而小于|max|的伪随机整数。

3. 下面两个表达式各表示什么意思

0..100

0...100

答:

(1)0..100:用数学表示闭区间[0,100]。

(2)0…100:用数学表示左闭右开区间[0,100)。

示例代码:

a=1..5 #表示[1,5]

b=6...10 #表示[6,10)

# 使用“===”操做符,比较某一个数值(右侧操做数)是否在一个范围内(左操做数)

# 若在范围内,返回true;反之,返回false。

puts a===1 # =>true

puts a===5 # =>true

puts b===6 # =>true

puts b===10 # =>false

4. 在Ruby中,符号是哪一个类的实例,其语法以及最多见的用途分别是什么

答:(1)在Ruby中,符号是Symbol类的实例。

(2)建立一个Symbol对象的方法是在标识符或者字符串前面加上冒号。

:symbol # A Symbol literal

:"symbol" # The same literal

:'another long symbol' # Quotes are useful for symbols with spaces

s = "string"

sym = :"#{s}" # The Symbol :string

(3)Symbol的最多见用途:

对于Symbol对象,名字(相同内容的字符串)相同,则Symbol相同;名字不一样,则Symbol不一样。Symbol对象一旦定义将一直存在,直到程序执行退出。所以,当咱们着重于将字符串做为一个独一无二的标识符,而不在于其内容的时候,使用符号,好比:AM和:PM。

5. 如何把范围0...10转换为数组,转换以后的数组是什么

答:

把范围0…10转换成数组的方法是to_a。转换后的数组为[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

clip_image004[7]

6. ('bar'..'bat').to_a的值是什么

答: p ('bar'..'bat').to_a的值为["bar", "bas", "bat"]

7. 从系统中获取时间,而后判断当前年份是不是闰年,写一程序实现。

答:

# 闰年的条件是:

#(1)公元年数如能被4整除,而不能被100整除,则是闰年;

#(2)公元年数能被400整除也是闰年;

time_now = Time.now

year_now=time_now.year

if (year_now%4 == 0 && year_now%100 != 0) || year_now%400 == 0

puts "#{year_now} is leap year"

else

puts "#{year_now} is not leap year! "

end

运行结果以下:

clip_image006[5]

1. Array.new(3)的值是什么?

答:查询API获得

clip_image002[8]

Array.new(3)的值是一个长度为3的新数组。

2. 数组a=[1,2,3,4,5],a[1]、a[-1]的值分别是多少。

答:以下图所示,数组的索引下标从左到右时从0开始增长,从右到左时从-1开始减小。

clip_image004[9]

3. 数组[1,nil,nil,2,3,nil]的长度是多少?

答:该数组的长度为6

clip_image006[7]

4. 写程序实现把数组[5,3,7,2,1,10]由小到大进行排序的功能。

答:根据查看Array的API文档,以下:

clip_image008[5]

故使用sort方法,程序以下:

clip_image010

5. 写程序实现找出在数组[3,4,1,10]中,而不在数组[3,4,6,7,8]中的元素的功能。

答: 设数组a=[3,4,1,10],数组b=[3,4,6,7,8]。那么出如今数组a中不在数组b中的元素就能够用a-b表示,查询API得:

clip_image012

代码和运行结果以下:

clip_image014

6.写程序实现删除数组[1,3,5,6,7]中元素5的功能。

答:查看Array的API得,

clip_image016

Array的delete方法能够删除数组中指定的元素,并且经过查看源代码可得delete方法是遍历整个数组,所以会删除所有重复的待删除元素。

程序代码以及结果以下:

clip_image018

7. 写程序实现删除数组[1,2,3,3,4,5,5]中重复元素的功能

答:查看Array的API,使用方法uniq能够达到去除重复元素的功能。

clip_image020

程序代码和运行结果以下:

clip_image022

8. 写程序实现功能:初始化一个hash,对hash 进行遍历,并打印每组键和值。

答: 查询hash的API得,能够经过each进行迭代输出每组键和值

clip_image024

程序代码和运行结果以下:

# Create and initialize a new hash object

h = { "one" => 1, "two" => 2, "three" => 3 }

# Iterative output each key-value pair

h.each{|key,value| puts "#{key} => #{value}"}

运行结果以下:

clip_image026

9. 写程序,使用Test::Unit对如下各函数进行单元测试

class Foo

def is_foo?

"foo"

end

def is_bar?

"bar"

end

end

答: 首先建立一个Foo类的Test Case,以下:

clip_image028

单元测试代码以下:

require 'foo'

require 'test/unit'

class FooTest < Test::Unit::TestCase

def test_is_foo?

assert_equal("foo",Foo.new.is_foo?)

end

def test_is_bar?

assert_equal("bar",Foo.new.is_bar?)

end

end

相关文章
相关标签/搜索