码迷,mamicode.com
首页 > 其他好文 > 详细

Ruby基础语法

时间:2018-09-07 23:53:02      阅读:435      评论:0      收藏:0      [点我收藏+]

标签:eth   正则表达   iterator   打开文件   oid   open   code   赋值   nil   

基础

  1. puts 显示文本后另起一行,而 print 不会
  2. everthing在Ruby里都是对象,所以它们都包含内置methods
  3. 用"."来调用方法
  4. "#"单行注释
  5. 多行注释
    =begin This is a comment ! =end
  6. 命名规范
    1. 局部变量 : 小写字母 ,用 _ 分割Words
  7. name.method1.method2.medthod3
  8. 各种数据在Ruby中都是对象
  9. 容器(Container) : 保存对象的对象
    • 迭代器iterator是循环的容器
    • 运算符operator是运算的容器
  10. 数据结构 : 数据的集合
  11. nil是一个特殊值,表示对象不存在,nil在判断条件中被认为是‘假‘


String Method

  1. length, reverse, upcase, downcase, capitalize
  2. include? "words" 判断字符串中是否含有words , 返回值为true或false
  3. gsub(/word1/, "word2") 用word2替换字符串中的word1
    • gsub 是 global substitution(全局替换)


格式化文本

  1. gets 完成后自动添加一个换行符,调用方法chomp会删除额外的换行符.如图,若不删除可能会引起错误
    技术分享图片

  2. 格式化输出"#{variable_name}"
  3. 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

注意事项

  1. 数组为动态数组
  2. 任何类型的对象都可以保存在数组, 不同类型的对象可以保存在一个数组中


散列(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基础语法

标签:eth   正则表达   iterator   打开文件   oid   open   code   赋值   nil   

原文地址:https://www.cnblogs.com/CodeAndMoe/p/9607516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!