方法
方法是较长代码段的快捷方式。创建方法使用 def 关键字,后跟方法名,并以 end 结束。
Ruby:
def my_method
print "Printing from my_method!"
end
my_method #=> "Printing from my_method!"
方法作用域
方法内部无法访问方法外部的变量,反之亦然。
Ruby:
a = 10
def work
print a
end
work #=> NameError: Undefined variable or method 'a'
方法内部的变量只在方法内部有效。
Ruby:
def work
a = 10
end
work
print a #=> NameError: Undefined variable or method 'a'
方法参数
方法可以接受参数。
Ruby:
def work(my_argument)
print my_argument
end
work(1) # 打印出 '1'
可以传递多个参数。
Ruby:
def work(a, b, c)
print a * b * c
end
work(1, 2, 3) #=> 6
方法可以有默认参数。
Ruby:
def mult(a, b = 1)
print a * b
end
mult(6) #=> 6 (b 默认为 1)
显式和隐式调用
变量和方法可以同名,使用 () 区分。
Ruby:
var = "Variable!"
def var
print "Method!"
end
print var #=> "Variable!"
print var() #=> "Method!"
返回值
方法调用会返回一个值。
Ruby:
def work(a_number)
return a_number
end
print work(6) #=> 6
return 关键字会立即退出方法。
Ruby:
def work
return 1
print "This will never be printed!"
end
print work #=> 1
Nil
print 方法返回 nil。
Ruby:
var = print 1 # 打印出 1
print var #=> nil
显式和隐式返回
方法默认返回最后一行代码的结果。
Ruby:
def mult(a, b = 2)
a * b
end
var = mult(2, 2)
print var #=> 4
可以使用显式的 return 关键字。
Ruby:
def mult(a, b = 2)
return a * b
-1 # 这行永远不会执行
end
var = mult(2, 2)
print var #=> 4
用例示例
Ruby:
def get_seconds(minute)
if minute < 0
return "You cannot have a negative amount of minutes!"
end
minute * 60
end
print get_seconds(4) #=> 240
print get_seconds(1) #=> 60
print get_seconds(0) #=> 0
print get_seconds(-1) #=> "You cannot have a negative amount of minutes!"
Ruby:
def seconds_lived(age)
if age < 0
return 0
elsif age > 122
return "Nobody has ever lived longer than 122 years!"
end
60 * 60 * 24 * 365 * age
end
print seconds_lived(16) #=> 504576000
print seconds_lived(121) #=> 3815856000
print seconds_lived(122) #=> 3847392000
print seconds_lived(123) #=> "Nobody has ever lived longer than 122 years!"
print seconds_lived(0) #=> 0
print seconds_lived(-1) #=> 0