我看到一些程序员使用这段代码:
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
所以结论是该方法除了递归之外,同一方法定义中的名称没有效果。
答案 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"