Ruby2 Method and Block

admin 2018年5月13日04:26:35评论440 views字数 1033阅读3分26秒阅读模式
摘要

凡有方法都有返回值,方法体最后一行代码的返回值默认会做为方法的返回值,也可以显式的使用return关键字


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的区别

  1. Proc和Lambda都是对象,而Block不是
  2. 参数列表中最多只能有一个Block,但是可以有多个Proc或Lambda
  3. Lambda对参数的检查很严格,而Proc则比较宽松
  4. Proc和Lambda中return关键字的行为是不同的

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2018年5月13日04:26:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Ruby2 Method and Blockhttp://cn-sec.com/archives/51531.html

发表评论

匿名网友 填写信息