Ruby on Rails学习笔记之Ruby基础 —— Part3 迭代器


Part1 基本概念
Part 2 数据类型


Part3 迭代器

循环、分支

前备 — 块

块的形式

块中只有一行代码,用{}包裹

{puts "Hello"}

多行代码使用doend块实现

do
    puts "A"
    puts "B"
end

块调用

块可以视为方法调用,通过将块放在需要调用块的代码行末来实现。使用yield声明调用一次块。

def call
    puts "Start"
    yield
    yield
    puts "End"
end

call {puts "Hello"}

# Start
# Hello
# Hello
# End
def call
    puts "Start"
    yield
    puts "End"
end

call do
    puts "Hello"
    puts "Hello"
end

# Start
# Hello
# Hello
# End

yield还可以传递参数

def call
    yield("Hello", 99)
end

call {|arg1, arg2| puts arg1, arg2}

call do |arg1, arg2|
    puts arg1
    puts arg2
end

迭代器 Iterator

一个Ruby迭代器就是一个简单的能接收代码块的方法

特征:一个方法里面包含yield调用,就一定是迭代器

块被当作一个参数传入迭代器方法,迭代器方法通过yield来调用块,传入参数并执行

内置Iterator

each

对容器中的每个元素调用块

arr = [0, 1, 2, 3, 4, 5]
arr.each {|num| puts num}
# 逐个输出arr中的元素
each_with_index

该迭代器使用了两个参数elementindexelement为容器中的元素,index为该元素的索引

arr = ['Ruby', 'Java']
arr.each_with_index do |ele, index|
    puts "#{index}, is #{ele}"
end

# 0, I love Ruby!
# 1, I love Java!
collect

将容器中所有元素传递给块,然后在块中对所有元素统一处理后返回一个Array

arr = [0, 1, 2, 3]
arr_new = a.collect {|x| x * 2}

# arr_new = [0, 2, 4, 6]

循环结构

四种循环

while 语句

条件为true进入循环

while condition :  # 或者 while condition do
    puts "Hello"
end

do while 语句

执行一次待循环代码后再判断条件,为true进入下一次执行

# 形式1
begin
    puts "Hello"
end while condition

# 形式2
puts "Hello" while condition

for 语句

对于list中的每个元素执行一次(同Python)

for var in list do
    puts var
end

until 循环

条件为false进入循环

until condition do
    puts "Hello"
end

控制语句

break 语句

终止最内层循环,跳入外层

next 语句

跳入本循环的下一个迭代

redo 循环

重新开始最内部循环的本次迭代

分支结构

if 语句

if (condition)
    puts "Hello"
end

if - else 语句

if condition1  # 或者 if condition then
    puts "condition1"
elsif condition2 
    puts "condition2"
else
    puts "fail"
end    
  • ❗️ Ruby使用elsif ,而C、C++、Java使用else if,Python使用elif ❗️
  • condition值falsenil才为假,其他值都为真
unless 语句 (尽量不使用)

unlessif相同用法,意义相反,不满足条件执行

unless condition  # 或者 unless condition then
    puts "not satisfied"
end
unless condition
    puts "1"
elsif
    puts "2"
else
    puts "3"
end

case 语句

对表达式匹配判断,进行分支选择

case expression
    when condition1  # 可多个匹配选择  可使用保留字then,通常省略
        puts "first code"
    when condition2, condition3 then
        puts "second code"
    else
        puts "default code"
end  

when使用===判断expression是否在condition允许的范围内,举例 (1..5) === 5返回true

===不同于==

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yeeman_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值