[Rails学习之路]初识Ruby(二)

继续上次Ruby的学习。接下来就到了Ruby的方法。

Ruby的方法与Python仍然很像。使用def定义,可以使用undef取消定义。
在Ruby中,经常可以看见方法后面跟有“?”或“!”。这其实是方法名的一部分。
带有“?”表示返回一个布尔值;带有“!”表示方法会修改对象自身。
以Array类为例:

  • empty?返回数组是否为空。相当于isEmpty
  • sort!表示会对数组原地排序。
  • sort则返回一个排好序的副本,自身不会改变。

Ruby的方法可以无参数,有多个参数,甚至可变数量的参数。

  • 方法如果没有参数可以不带括号。
  • 方法中的参数给定缺省值。
  • 对于多个参数,不支持Python式的指定参数,但可以借助字典实现。

    method('a'=>1, 'b'=>2)
  • 可变参数与Python类似。

    def sum(*num)
        result = 0
        num.each {|i| result += i}
        return result
    end

因为Ruby中变量不表示类型,而且又支持缺省参数,所以方法不支持重载。但是支持重写。

方法的返回值为return表达式的值,或者为最后一条语句的值。如果return不带参数,则返回nil;如果有多个参数,则返回一个数组。

Ruby还有一个有趣的东西叫做block。虽然有传统的for循环,但Ruby更常用的是each循环,这里就用到了block。

block有这么几种使用形式:

def method
    yield
end

def method(&p)
    p.call
end

method { puts "Hello" }

这里的&p是什么?p表示的是一个Poroc对象。Proc表示Procedure。&表示将Proc对象转换为block。Proc和block的主要区别在于Proc对象可以保存,重复使用,而block不能。如果需要再次使用,可以用Proc.new()proc()将block转换成Proc对象。

还有一个与block很相似的lambda表达式。它的样子像这样:

lambda {|x| puts x}

长得虽像,但lambda是匿名函数,block是代码块。
所以它和block主要有两个区别:

  • lambda会检查参数个数,而block不会。
  • lambda因为是函数,所以调用时是函数调用,返回时回到原函数;而block更像是嵌入了一个代码块,如果返回就相当于跳出了原函数。

转载于:https://www.cnblogs.com/CodeCabin/p/4098267.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值