irb(main):064:1* def volume(x,y,z) irb(main):065:1* return x*y*z irb(main):066:0> end => :volume irb(main):067:0> p volume(2,3,4) 24
方法的返回值也不一定是程序最后一行的执行结果。
irb(main):068:1* def max(a,b) irb(main):069:2* if a>b irb(main):070:2* a irb(main):071:2* else irb(main):072:2* b irb(main):073:1* end irb(main):074:0> end => :max irb(main):075:0> p max(10,5) 10
定义带块的方法
irb(main):092:1* def myloop irb(main):093:2* while true irb(main):094:2* yield irb(main):095:1* end irb(main):096:0> end => :myloop irb(main):097:0> num=1 irb(main):098:1* myloop do irb(main):099:1* puts "num is #{num}" irb(main):100:1* break if num > 10 irb(main):101:1* num *= 2 irb(main):102:0> end num is 1 num is 2 num is 4 num is 8 num is 16
参数个数不确定的方法
可以选择把所有的参数封装为数组,供方法内部使用
irb(main):001:1* def foo(*args) irb(main):002:1* args irb(main):003:0> end => :foo irb(main):004:0> p foo(1,2,3,4) [1, 2, 3, 4]
irb(main):034:1* def area2(x:0,y:0,z:0) irb(main):035:1* xy = x*y irb(main):036:1* yz = y*z irb(main):037:1* zx = z*x irb(main):038:1* (xy+yz+zx) * 2 irb(main):039:0> end => :area2 irb(main):040:0> args1 = {x:2,y:3,z:4} irb(main):041:0> p area2(args1) (irb):41: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call (irb):34: warning: The called method `area2' is defined here 52 => 52 irb(main):042:0> args2 = {x:2,z:3} irb(main):044:0> p area2(args2) (irb):44: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call (irb):34: warning: The called method `area2' is defined here 12 => 12