在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.1 函数定义 Ruby中函数通过def…end方式定义。 def fib(n) (n==1 || n==2) ? 1 : fib(n-1)+fib(n-2) end puts fib(7) #13 其中fib为函数名,n为函数参数。如果要返回值可使用return,如果没有指定return,则以最后一个语句执行结果的返回值,作为函数的返回值。 在ruby中可以为对象单独定义方法,和JavaScript类似。 obj = Object.new def obj.fib(n) (n==1 || n==2) ? 1 : fib(n-1)+fib(n-2) end puts obj.fib(7) #13 上例中,为obj定义了fb 单例方法(Singleton method)。如果在顶层环境中定义方法时,没有指定方法由哪个对象拥有,则方法是由Object拥有的私有(private)实例方法(Instance method)。 上面范例的fb方法,相当于以下写法: class Object #以下定义了fib实例方法 def fib(n) (n==1 || n==2) ? 1 : fib(n-1)+fib(n-2) end private :fib end 定义在顶层的方法没有指定拥有者时,就是Object拥有的私有实例方法,Object为所有类别的父类别,因此任何类或模组定义中,就可以直接调用。 调用方法时没有指定讯息接收者,预设以self为讯息接收者,如果是调用私有方法,不用也不能撰写self,因为私有方法只能在物件内部使用,不可透过object.method的方式调用。 1.2 函数参数 在 Ruby 中不支持其它语言重载方法的概念,也就是在 Ruby 中同一个名称空间中,不能有相同的方法名称。如果你定义了两个方法具有相同的名称但拥有不同的参数个数,则后者定义会覆盖前者定义。 由于 Ruby 是动态语言,只需在设计时确认传入方法的对象所拥有的特性或方法,对于以参数个数不同来区别的方法重载概念,在 Ruby 中可以使用预设引数( Argument )来解决。例如: def sum(a, b, c = 30) a + b + c end puts sum(10, 20, 30) #显示60 puts sum(10, 20) #显示60 像sum这种加总数字的需求,事先可能不知道要传入的参数个数,可以在定义方法的参数时使用*,表示该参数接受不定长度引数。例如: def sum(*numbers) total = 0 numbers.each do |number| total += number end total end puts sum(1, 2) #显示3 puts sum(1, 2, 3) #显示6 puts sum(1, 2, 3, 4) #显示10 你传入方法的引数,会被收集在一个数组中,再设定给numbers参数。*可以用来拆解数组,将元素逐一指定给数个变量,这个语法也适用在方法的参数指定,你可以将一个数组传入,只要在传入时加上*,则数组中每个元素会自动指定给各个参数。例如: def sum(a, b, c) a + b + c end numbers = [1, 2, 3] puts sum(*numbers) #显示6 如果方法中传回数组,也可以这样指定。例如: def some [1, 2, 3] end x, y, z = some puts "#{x}, #{y}, #{z}" #显示1, 2, 3 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论