Method(Function)
def hi(name) p "hi " + name end hi('666') # => "hi 666" hi 'code' #括号省略 => "hi code" def hello name p "hello #{name}" end hello 'world' # => "hello world"
Method 参数
def hi name='code' p "hi " +name end hi # => "hi code" def hi name,age=32 p "#{name} is #{age}" end hi "code" # => "code is 32" hi "code", 54 # => "code is 54"
Method 返回值
凡有方法都有返回值,方法体最后一行代码的返回值默认会做为方法的返回值,也可以显式的使用return关键字
def hi p 'ok' end hi # =>nil def hi 'ok' end hi #=> 'ok' def hi return '2' 1 end hi # => 2
Block
Block类似于一个方法,可以使用do/en来定义,也可以使用大括号{}
File.open('access.log','w+') do |f| f.puts 'line 1' end
Block内置方法
[1, 2, 3].each do |x| p x end {a:1,b:2}.each do |x, y| p y end
Block变量作用域
#ruby 2.0之前外部变量x的值会被block修改 x = 10 [1, 2, 3].each do |x| p x end x # =>10
自定义block
def hi name yield(name) end hi('code'){ |x| "hello #{x}" }
yield 为调用外部block的关键字(个人感觉比较像C#的委托调用)
proc
hi = proc{|x| "hello #{x}"} hi.call('world') # 等同于 hi = Proc.new {|x| "hello #{world}"} hi.call('world')
proc相当于定义了一个方法变量,可以吧方法当做参数传递(个人感觉比较像C#的委托)
lambda
lambda和proc非常相似
hi =lambda {|x| "hello #{x}"} hi.call('world')
研究lambda和proc的区别
- Proc和Lambda都是对象,而Block不是
- 参数列表中最多只能有一个Block,但是可以有多个Proc或Lambda
- Lambda对参数的检查很严格,而Proc则比较宽松
- Proc和Lambda中return关键字的行为是不同的
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论