Ruby基本介绍(五)Enumerable(枚举)入门

今天是8/8...来首"Daddy"吧!


本篇会提到的事。

1.Ruby回圈中的Iteration复习,与Enumerable简介。


前篇文章的范例

shake = ["head", "hand", "body"]

2.7.3 :133 > shake.each {|part| puts "Shake your #{part}!"}
Shake your head!
Shake your hand!
Shake your body!
=> ["head", "hand", "body"] 

当然,如果想了解Iteration这个词,直接上wiki查就好,这边只会分享,在Rails中,each常常会见到。
再次提醒Iteration(迭代)语法後面会接block。

  array.each do |a|
    #流程控制
  end
  #也可写作
  array.each { |a| #流程控制 }
  #do..end 或 { }就是block的写法。
  #|a|中,| |是black内的语法,通常我们会使用迭代或Enumerable(枚举)时,对象资料(物件, 实体)通常为阵列或杂凑,| |中里面的变数,代表对象里每一个资料的临时名称,所以可依照变数原则随意命名。

Enumerable(枚举)

菜鸟式回答:枚举是迭代的进化。

范例举例

def num_add(array)
  #流程控制区
end

p num_add([1, 2, 3]) #=> [2, 3, 4]

题目:我希望一个数字阵列资料,使用num_add这个方法後,"回传"新的阵列,新阵列里每个数字是旧阵列每个数字+1。

迭代解法

def num_add(array)
  #我需要一个新阵列
  #将旧阵列里每个数字+1後,并放进新阵列里。
  #回传这个新阵列
end
def num_add(array)
  new_arr = []  #new_arr = Array.new 。 
  array.each {|num| new_array << num + 1}  #我也习惯,简短的流程控制用{},复杂的用do..end。
  new_arr #return new_arr, return可省略
end

p num_add([1, 2, 3])

#  << 特殊语法,想成将东西加入阵列。

疑问:

  1. 为什麽一定要加return? 难道使用each方法没有回传值吗? 不是说方法都有回传值吗?
  2. 用each时,程序没有执行+1这件事吗?

Ans:有回传值,回传原阵列给你,所以自己定义方法时要注意,要明确告知回传什麽资料。
有执行+1,可是你没有告诉电脑要显示给你看。
一些特性等特别学习Block(程序码区块)後就会更了解。
补充:

2.7.3 :002 > [1, 2, 3].each {|num| puts num + 1 }
2
3
4
 => [1, 2, 3] 
枚举解法
def num_add(array)
  array.map {|num| num + 1 }
end

#流程控制:将阵列里每个数字+1後回传给我。
2.7.3 :001 > [1, 2, 3].map { |num| num + 1 }
 => [2, 3, 4] 

嗯,完成,第一次看到我也是觉得WTF。(尤其我是素人)
我的确是一开始完全看不懂到底发生何事的那种初学者,但其实迭代与枚举并不是只有Ruby才有这种观念,很多程序语言都会有,但了解逻辑之後,其实就很简单了。

学习过程中,多以枚举取代迭代吧。

当然如果只会迭代也不是不可以,但就像有更好用的武器不用,硬要拿折断的铁剑打王,很累的。(Dark soul梗)



<<:  python3-日历

>>:  [ JS个人笔记 ] 立即函式(IIFE) & 回呼函式 (Callback Function) —DAY7

JavaScript入门 Day16_阵列2

昨天讲到了阵列,那今天要讲怎麽让阵列的资料呈现在网页上 在阵列里,第一个资料的位置不是1而是0 所以...

[Day13] 多执行绪

最近都凌晨睡前写铁人赛,就怕隔天忘记Q 嘛 这次铁人赛真的学到蛮多的,算是复习吧。 原本可能搞不懂的...

Day 16 JavaScript boxing vs unboxing

boxing: 封装可以让原始型态的资料暂时转成物件,这样他才可以使用属性或方法。 遇到使用字面值(...

[Day 21] - Django-REST-Framework APIView 介绍 -- 处理 HTTP Method 的好帮手

前言 在最近这几天,打算将 DRF 常用的 class 的功能以及使用方法,带大家有一个基础的认识,...

另一个现实世界,网路是如何运作的?

前言 在这个系列中我所想要写的,是把一般人会接触到的资讯产品,背後讯息沟通的原理用比较简单(或许吧)...