0

我看到一些编码器使用此代码:

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

里面是什么client意思def 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

因此得出的结论是,同一方法定义中的方法名称除了递归之外没有任何作用。

4

1 回答 1

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"
于 2013-08-11T20:07:03.130 回答