Ruby基础语法
Posted codeandmoe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby基础语法相关的知识,希望对你有一定的参考价值。
基础
- puts 显示文本后另起一行,而 print 不会
- everthing在Ruby里都是对象,所以它们都包含内置methods
- 用"."来调用方法
- "#"单行注释
- 多行注释
=begin This is a comment ! =end
- 命名规范
- 局部变量 : 小写字母 ,用 _ 分割Words
- name.method1.method2.medthod3
- 各种数据在Ruby中都是对象
- 容器(Container) : 保存对象的对象
- 迭代器iterator是循环的容器
- 运算符operator是运算的容器
- 数据结构 : 数据的集合
- nil是一个特殊值,表示对象不存在,nil在判断条件中被认为是‘假‘
String Method
- length, reverse, upcase, downcase, capitalize
- include? "words" 判断字符串中是否含有words , 返回值为true或false
- gsub(/word1/, "word2") 用word2替换字符串中的word1
- gsub 是 global substitution(全局替换)
格式化文本
gets 完成后自动添加一个换行符,调用方法chomp会删除额外的换行符.如图,若不删除可能会引起错误
- 格式化输出"#{variable_name}"
name.method! 感叹号的修饰表示调用method修改name自身值
控制流
一定不要忘记end !!!
1.if/elsif/else
# then可以省略
if condition then
content
elsif condition then
content
else
content
end
Ruby不关心content是否有空格,不过惯例是2个空格
2.unless/else
如果unless语句是false则执行,否则执行else
unless condition
content
else
content
end
unless 和 if 还可以添加到一条语句后面,表明语句在何种条件下执行
puts "if condition is false" unless condition
puts "if condition is true" if condition
循环和迭代
循环
while 运行条件为true
# do可以省略
while condition do
content
end
until 运行条件为false
until condition
content
end
for in
#从1到9
for num in 1...10
puts num
end
#从1到10
for num in 1..10
puts num
end
迭代
保存对象的对象,我们称为容器(container)。
迭代器是 Ruby 的一个特色功能。从迭代器的英语拼写也可以知道,迭代器表示的是循环(iterate)的容器(-or)。类似地,运算符(operator)也就是运算(operate)的容器(-or),等等。总之,迭代器就是指用于执行循环处理的方法。
# 10是次数
10.times do
puts ‘hello‘
end
数组
任何对象都可以保存在数组中
# 使用数组
arrayName = [var1, var2, var3]
# 空数组
arrayName = []
# 获取数组大小
arrayName.size
# 遍历所有数组元素
# .each方法会把数组元素逐个取出赋值给|变量|指定的变量
arrayName.each do |变量|
block
end
注意事项
- 数组为动态数组
- 任何类型的对象都可以保存在数组, 不同类型的对象可以保存在一个数组中
散列(hash)
键(key) : 一般以 符号(symbol) 、字符串、数值作为键
散列的创建
# 使用大括号
song = { :title => "android", :company => "Google"}
song = { "名字" => "Android", "公司" =>"Google"}
mark = { 11 => "Jack", 12 => "Queen", 13 => "King"}
# 常把符号当做键来使用,简短写法,两者相同
person = { name: "张三", pinyin: "zhangsan"}
person = { :name => "张三", :pinyin => "zhangsan"}
散列的使用
hashName[:keyName]
散列的循环
散列.each do |键变量, 值变量|
block
end
符号(symbol)
符号也是对象,一般作名称标签用
# 创建对象,标识符前面加上 ‘:’
sym = :foo
sym2 = :"foo"
# 使用符号比字符串更有效率
# 对符号使用to_s方法得到字符串
sym = :foo
sym.to_s
# 对字符串使用to_sym方法得到符号
"foo".to_sym
正则表达式
匹配:判断字符串是否适用于某模式的过程称为匹配
/模式/ =~ 字符串
# 匹配成功则返回匹配位置,索引开始为0
# 匹配失败返回nil
命令行输入数据
一次读取全部文本
File.open(filename) 表示打开名为 filename 的文件,并返回"读
取该文件所需的对象"。
# 获得文件名
filename = ARGV[0]
# 打开文件,并返回"读取该文件所需的对象"
file = File.open(filename)
# 读取文件内容,输出文本
text = file.read
puts text
#关闭文件
file.close
若只是读取文本内容,直接用read方法更方便
filename = ARGV[0]
text = File.read(filename)
puts text
不使用变量的话,一行搞定
puts File.read(ARGV[0])
逐行读取
each_line 方法就是对文件进行逐行处理
filename = ARGV[0]
file = File.open(filename)
file.each_line do |line|
print line
end
file.close
从文件中读取指定模式的内容并输出
Regexp.new (str) 表示把字符串 str 转换为正则表达式对象
pattern = Regexp.new(ARGV[0])
filename = ARGV[1]
file = File.open(filename)
file.each_line do |line|
if pattern =~ line
print line
end
end
file.close
其他文件的引用
大部分编程语言都提供了把多个不同程序组合为一个程序的功能。像这样,被其他程序引用的程序,我们称为库(library)。
Ruby 使用 require 方法或者 require_relative 方法来引用库。库名可以省略后缀 .rb。
require 方法用于引用已存在的库。只需要指定库名,程序就会在预先定义好的路径下查找并读取与 Ruby 一起安装的库。而 require_relative 方法在查找库时,则是根据执行中的程序目录(文件夹)来进行的,这有利于程序读取写在不同文件的代码。
# grep.rb文件
def simple_grep(pattern, filename)
file = File.open(filename)
file.each_line do |line|
if pattern =~ line
puts line
end
end
file.close
end
# use_grep.rb文件
require_relative "grep"
pattern = Regexp.new(ARGV[0])
filename = ARGV[1]
simple_grep(pattern, filename)
Ruby 提供了很多便利的标准库,在我们的程序需要用到时,都可以使用 require 方法加以引用。
以上是关于Ruby基础语法的主要内容,如果未能解决你的问题,请参考以下文章