方法名称在其自己的方法中意味着什么?

时间:2013-08-11 20:02:18

标签: ruby methods

我看到一些程序员使用这段代码:

def client
  client ||= OAuth2::Client.new(G_API_CLIENT, G_API_SECRET, bla)
end

get "/auth" do
  redirect client.auth_code.authorize_url(blabla)
end

clientdef client内意味着什么?它不等于:

def client
  OAuth2::Client.new(G_API_CLIENT, G_API_SECRET, bla)
end

当我在irb上尝试时:

> def test
>   p 'called'
>   test ||= 1
> end
=> nil
> test
"called"
=> 1
> test
"called"
=> 1

所以结论是该方法除了递归之外,同一方法定义中的名称没有效果。

1 个答案:

答案 0 :(得分:4)

  

所以结论是,方法名称中的方法名称除了递归之外没有效果吗?

不,它不在您的示例中。test是方法test的局部变量。

见下文:

def test
  test ||= 1
  defined? test
end

test # => "local-variable"

现在看看您是否跳过test ||= 1,然后test将成为方法调用,如果您从那里调用test,那么您将获得stack level too deep (SystemStackError)

def test
  defined? test
end

test # => "method"
相关问题