2.7. 核心语言——对象,类,方法-2

未匹配的标注

定义时,带参数的方法

在定义里,如果一个方法带有参数,他们就会被指定在方法的名称后面。

class Robot
    def crunch_numbers(x, y)
        x + y
    end
end

调用时,带参数的方法

调用方法的时候,如果要传递参数,我们也是在它的名称后面跟上参数。

bot.crunch_numbers(1, 2) # returns 3

方法参数的括号是可选的,所以说上面也可以写成这个样子。

bot.crunch_numbers 1, 2 # returns 3

为清晰起见,大部分带参数的方法调用都会使用括号。不带参数的方法调用通常不会使用括号。 bot.talk 等同于 bot.talk(),def talk 等同于 def talk()。 Ruby 不像其他的面向对象语言,没有公有对象属性。你只可以通过调用它的方法与一个对象进行交互。

参数按引用传递

参数总是通过引用传递,而不是被拷贝。所以说如果你传了一个值(Ruby 中所有值都是对象)给一个方法,然后在方法里面改变了它,那么最后这个改变是会被调用者看到的。

class ListChanger
  def change_list(list)
    list.push(0)
  end
end

changer = ListChanger.new
array = [1, 2, 3]
changer.change_list(array)

print array # [1,2,3,0]

image-20221004163335707

方法的可选参数

方法还可以有可选参数,在方法定义里面,跟有赋值语句的参数就是可选的,这个赋值指定了它的默认值。

class ListChanger
  def change_list(list, value = 0)
    list.push(value)
  end
end

changer = ListChanger.new
array = [1, 2, 3]
print changer.change_list(array, 4) # [1,2,3,4]
print changer.change_list(array) # [1,2,3,4,0]

在上例中,调用 change_list 方法时,你指定可选参数为4,那么这个 value 就是 4 ,如果你不指定可选参数,就使用它默认的0。

image-20221004163737720

默认值的表达式是在每次方法被调用的时候才去估值的,而不是定义的时候。所以说下面这个方法在每次调用的时候才创建一个新的数组。

def change_list(list = [], value = 0)

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~