Ruby基本介绍(七) && missing-number

本篇音乐分享


本篇文章会提到的

  1. 上一篇衍生题:include,与extend差异?
  2. missing-number

include与extend差异?

模组是将重复的功能(编码)整理出来,当还有其他类别也需要时,"挂"上去,可以用include或extend。
include:将模组中的方法成为实体方法时使用。
extend:将模组中的方法成为类别方法时使用。

2.7.3 :020 > module One_module
2.7.3 :021 >   def i_have_a_method
2.7.3 :022 >     puts '我是模组喔'
2.7.3 :023 >   end
2.7.3 :024 > end
 => :i_have_a_method 

2.7.3 :029 > class One_class
2.7.3 :030 >   include One_module
2.7.3 :031 > end
 => One_class 

2.7.3 :032 > class Two_class
2.7.3 :033 >   extend One_module
2.7.3 :034 > end
 => Two_class 
 
2.7.3 :035 > One_class.i_have_a_method
NoMethodError (undefined method `i_have_a_method' for One_class:Class)
2.7.3 :036 > Two_class.i_have_a_method
我是模组喔

用extend挂模组时,模组内的方法成为类别方法。也表先出include挂载,类别不能使用。

2.7.3 :037 > one = One_class.new
 => #<One_class:0x00007fb5c531bc58> 
2.7.3 :038 > one.i_have_a_method
我是模组喔
 => nil 

须先实体化,include挂的模组中的方法才能使用。

补充:

2.7.3 :009 > new_arr = Array.new
 => [] 
2.7.3 :010 > new_arr2 = new_arr.new
NoMethodError (undefined method `new' for []:Array)

new给Array类别用.类别方法。

2.7.3 :011 > new_arr << 1
 => [1] 
2.7.3 :012 > new_arr << 2
 => [1, 2] 
2.7.3 :013 > new_arr << "三"
 => [1, 2, "三"] 
2.7.3 :014 > Array << new_arr
NoMethodError (undefined method `<<' for Array:Class)

<< 这个方法是实体在用.所以是实体方法。


Rails前,你可能需要知道,但是初学时很难搞清楚的事。

方法, 模组, 套件, 函式库, 框架 。

一个方法比较趋向实现一个逻辑。

一个模组集合一或多个方法,来达到一或多个功能。

套件与函式库是一或多个模组组合成一个资料夹或特定格式的档案,引入後(import, require)可使用。
Ruby中有许多函式库,依造Gem格式来发布,gem也可以视为套件。
(但有许多资料会把函式库与套件分开说明。)

框架不是只是函式库,框架很像是软件设计图,可以提供软件基础的功能,强大的框架可以给予软件较完善的功能。

但请记得,我们要学框架怎麽用,而不是学怎麽制作框架。


Missing-number

题目连结:https://leetcode.com/problems/missing-number/
题目整理:给一个阵列,阵列中有n个数字且在0..n的范围中,请找出缺失的数字。
例如[0, 2]这个阵列,有2个值,那就是找0..2与[0, 2]中缺的数字。
进阶项目请无视
整理

def missing_number(nums)

end

puts missing_number([3,0,1]) #=>2
puts missing_number([0,1]) #=>2
puts missing_number([9,6,4,2,3,5,7,0,1]) #=>8
puts missing_number([0]) #=>1
def missing_number(nums)
  #n等於阵列长度
  n = nums.length
  #一个包含n个数字,且由0开始的阵列
  new_nums = (0..n).to_a
  #找两个阵列中不一样的地方,这边如果是没有array特殊语法的语言可能就要用查表或是回圈处理。
  new_nums - nums
end

简化

def missing_number(nums)
  (0..nums.size).to_a - nums
end

我在一开始遇到的问题是,两个阵列相减
array1 - array2
应该要想成,第一个阵列与第二阵列相比,哪里不一样。

2.7.3 :001 > [1 ,3 ,5] - [2, 6, 7]
 => [1, 3, 5] 
2.7.3 :002 > [1 ,3 ,5] - [1, 3]
 => [5] 
2.7.3 :003 > [1 ,3 ,5] - [1, 3, 5, 7]
 => [] 

如果我没偷懒,下一篇应该要讲Rails了,但是我还没想好怎麽介绍.....


<<:  [WMX3] 6.GetEngineStatus

>>:  Mikrotik RouterOS从入门到实战系列-Mikrotik入门第六课

[经典回顾]网路异常疑机房失火,老板:「不是有防火墙?」

资料来源: 为什麽没有「防火墙」? 火灾袭「是方电讯」!某天然呆老板:不是有防火墙吗? 内湖机房失...

从精准回馈来看成长重要性

纪录,衍生出个人或是团队的观察日记。在绩效面谈需要聊聊对於同事或主管期许你给予回馈,这份观察纪录就可...

风险热度地图(Risk heat map)

-ISO 31000 “风险评估/分析”是什麽意思? 请注意,在 CISSP 考试大纲、OSG 和...

[Day 28] LIFF Bluetooth 与 LINE Things

前言 所以说LIFF Bluetooth能用在哪里? 最近我买了一台智能电风扇,当觉得热,又觉得伫立...

[Day30]结尾

怎会没时间写铁人文呢?时间就像乳沟,挤一挤就有了。 挤出时间百链成钢吧! 大家好今天我要来介绍喔不今...