Ruby基本介绍(六)方法、类别、模组 && Reverse String

偶尔还是要听点抒情点的...

韩剧推荐 : Live
第一集男女主角警校考试准备的那段蛮激励人心的,对素人想转职工程师的人而言,哈。


以下一样只分享自己初学时常混淆的部分。
我没有办法写得比书中更详细。

方法(method)

以def定义

def method_name(参数) #方法不一定要有参数。
  #流程
end
#呼叫方式
method_name(参数)

#不是一定要加p或puts才是使用方法,p与puts是印出方法使用後回传的结果。
#方法的名字符合变数的命名规则。

如下

2.7.3 :002 > def method_name(string)
2.7.3 :003 >   "#{string}"
2.7.3 :004 > end
 => :method_name 
2.7.3 :005 > method_name("test string")
 => "test string" 
2.7.3 :006 > p method_name("test string")
"test string"
 => "test string" 
#在进入Rails後,就会常看到这样
2.7.3 :007 > def method_name(string)
2.7.3 :008 >   @test = "#{string}"
2.7.3 :009 > end
 => :method_name 
2.7.3 :012 > @test
 => "test string" 

@test是实体变数。


类别(class)

以class定义,以常数命名,不加参数,可继承。Rails 中 class != model 。

calss Class_name
  def method1
    #流程
  end
  
  def method2
    #流程
  end
end

Rails常会看到

class Class_name < SpuerClassName
end

类别内可以有许多自己建立的"实体方法",由类别产生的"实体"都可使用这些方法,所以类别像一张设计图,由这张设计图设计出来的产物,我们称为实体,实体由new这个"类别方法"产生出。

补充

类别方法:此类别可用的方法。基本建立方式如下

def self.method_name
  #流程
end
#self初期请想成那个类别自己。

自己建立的任何类别,都有自己本身内建的类别方法。

2.7.3 :037 > class Abc
2.7.3 :038 >   def initialize(string)
2.7.3 :039 >     @abc = string
2.7.3 :040 >   end
2.7.3 :041 >   
2.7.3 :042 >   def split()
2.7.3 :043 >     @abc.split
2.7.3 :044 >   end
2.7.3 :045 > end
 => :split 
2.7.3 :047 > Abc.superclass
 => Object

没有指定的话,自行建立的类别都会继承於Object类别。

实体方法:实体可以用的方法。
开始使用Rails後,就会更清楚了。


模组(Module)

用modlue定义

module Module_name
  def method_name
  end
end

在开发时,有一些功能(method),可能很多类别都会用到或是开发後发现重复,我们可以将这些方法集中成模组,让类别"挂上去"使用。

class Class_name
  include Module_name  #挂上去的方式
end

衍生题:include,与extend差异?

模组与类别差异?

模组没有new这个方法,所以不会有实体是模组new出来的。
模组之间没有继承

快可以开始介绍Rails了吧?


衍生题:进入Rails前还需要知道?

类别用new产生实体,new是内建方法,为何还需要自己建立initialize方法?
方法的存取控制:public、protected、private。
懒人三方法:attr_reader、attr_writer、attr_accessor。

这些不留到下篇当文章用了。请看好书来解惑,为自己学Ruby on Rails


Reverse String

连结:https://leetcode.com/problems/reverse-string/

def reverse_string(s)
  #实作
end

p reverse_string(["h","e","l","l","o"]) #=> ["o","l","l","e","h"]
p reverse_string(["H","a","n","n","a","h"]) #=> ["h","a","n","n","a","H"]

招唤黑魔法!

reverse!

def reverse_string(s)
  s.reverse!
end

结束,我太无耻了.....

在不知道黑魔法前我是这样想的。
解法:建立一个新空阵列,从旧阵列由後开始一个一个摆进新阵列。
解法2:将阵列集合成一个字串,将字串反转後,再拆成阵列。


我比较适合战士!


<<:  Vue 使用 errorHandler, warnHandler 即时拦截网页错误

>>:  [ JS个人笔记 ] this的指向—DAY8

The Effective CISSP考试攻略

考试的难易 一个好的考试,通常会让你准备的很辛苦!但通过考试後会让你一直駡,怎麽考出来的题目没有想像...

予焦啦!结论与展望(二):铁人赛、正体中文科技写作与杂谈

铁人赛 这是一场疯狂的知识盛宴。有别於第一日提出的特别关注系列清单,今天我则会列出直到最後一天我都还...

[iT铁人赛Day2]JAVA的设定变数

在JAVA中,可以设定一些的变数,例如:long, int, char, float,...等等 l...

Day 2 python简易语法

在开始学习机器学习之前,我们得先准备好环境,我们使用python来当我们的程序语言,稍微介绍一下py...

DAY 11 『 UIAlertController 』Part2

昨天分享如何从中间弹出、由下而上弹出 UIAlertController 今天会介绍: 显示多个按钮...