ESS多版本 Ruby中的方法

方法​

方法是较长代码段的快捷方式。创建方法使用 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
 

在线成员

最新帖子

论坛统计

主题
540
消息
2,458
成员
3,090
最新成员
宝可迷