2.10Ruby语言的方法(Method)

1.方法的定义

方法遵循标识符的命名规则,全小写,多单词加下划线。

方法的参数依次为:无默认值的形参,有默认值的形参,*数组形参(任意数量的参数),&代码块形参(代码块作为对象)。

def 方法名(形参1,默认形参2 = 6,*数组形参,&代码块形参)
  .
  .
  希望执行的处理
  .
  局部变量(可选)
  .
end

2.类方法

接收者不是对象而是类本身的方法。

#用单键方法的方式定义类方法
class 类名
  def self.类方法
  end
end
#类方法的调用
类.类方法(实参1,实参2,···,实参n) 

3.实例方法

以对象为接收者的方法。

#实例方法的定义
class 类名
  def 实例方法
  end
end
#实例方法的调用
对象.实例方法(实参1,实参2,···,实参n)

上面的对象被称为接收者(receiver)。调用方法被称为“向对象发送消息(message)”,调用的结果是“对象接收(receive)了消息”。也就是说,方法的调用就是把几个参数组成的消息一起发送给对象的过程。

4.函数式方法

没有接收者的方法。

class HelloWorld                        # class语句
  def initialize(myname = "Ruby")       # initialize方法
    @name = myname                      #初始化实例变量
  end

  def hello                             #实例方法
    puts "Hello,world.I am #{@name}."   #puts为函数式方法
  end

bob = HelloWorld.new("Bob")             #new为类方法
bob.hello

5.方法的可见性

方法的可见性可以是公开(public)、私有(private)、被保护(protected)。

如果没有明确声明为private或protected,方法默认的可见性是public。

一个例外是initialize方法,它总是默认为private。还有一个例外,就是所有在类外定义的“全局”方法,虽然是Object的private方法,但是可以在任何地方被调用,相当于public。

私有(private)方法可以被类(或子类)的实例方法调用,只能通过隐性的接收者调用,不可以直接通过对象o.m或self.m显性调用。

方法可见性publicprivate
对象显性调用可以不可以
对象隐性调用可以可以
子类继承超类可以可以
子类对象显性调用可以不可以
子类对象隐性调用可以可以

6.带符号的方法

方法后的符号不可省略,因为有时候同一个类会有两个名字一样的方法

=(赋值方法)

比如一个对象o有一个叫做x=的方法,下面两种写法所做的事情是一样的

o.x=(1)    #常规写法
o.x = 1    #复制写法

?(断言方法)

用于返回Boolean值(Ruby没有Boolean类)的方法

empty?

!(可变方法)

告诉开发者使用此方法时要多加小心

sort!

7.递归方法

在方法代码体中调用方法自身,这种方法被成为递归方法。

def factorial(n)
  if n < 1
    raise "argument must be > 0"
  elsif n == 1
    1
  else
    n*factorial(n-1)
  end
end

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/ruby/rubybasic/1545.html

发表评论

登录后才能评论