本篇音乐分享
模组是将重复的功能(编码)整理出来,当还有其他类别也需要时,"挂"上去,可以用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)
<< 这个方法是实体在用.所以是实体方法。
一个方法比较趋向实现一个逻辑。
一个模组集合一或多个方法,来达到一或多个功能。
套件与函式库是一或多个模组组合成一个资料夹或特定格式的档案,引入後(import, require)可使用。
Ruby中有许多函式库,依造Gem格式来发布,gem也可以视为套件。
(但有许多资料会把函式库与套件分开说明。)
框架不是只是函式库,框架很像是软件设计图,可以提供软件基础的功能,强大的框架可以给予软件较完善的功能。
但请记得,我们要学框架怎麽用,而不是学怎麽制作框架。
题目连结: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了,但是我还没想好怎麽介绍.....
>>: Mikrotik RouterOS从入门到实战系列-Mikrotik入门第六课
资料来源: 为什麽没有「防火墙」? 火灾袭「是方电讯」!某天然呆老板:不是有防火墙吗? 内湖机房失...
纪录,衍生出个人或是团队的观察日记。在绩效面谈需要聊聊对於同事或主管期许你给予回馈,这份观察纪录就可...
-ISO 31000 “风险评估/分析”是什麽意思? 请注意,在 CISSP 考试大纲、OSG 和...
前言 所以说LIFF Bluetooth能用在哪里? 最近我买了一台智能电风扇,当觉得热,又觉得伫立...
怎会没时间写铁人文呢?时间就像乳沟,挤一挤就有了。 挤出时间百链成钢吧! 大家好今天我要来介绍喔不今...