sof*_*ofi 4 ruby metaprogramming
有一些代码:
def func
def func
1
end
end
Run Code Online (Sandbox Code Playgroud)
然后我尝试以下方法irb:
func
func.func
func
Run Code Online (Sandbox Code Playgroud)
并得到结果:
:func
1
1
Run Code Online (Sandbox Code Playgroud)
有人可以解释发生了什么吗?我有点了解第一个输出,但不了解后者。谢谢!
您可以在全局范围内的方法内定义方法。方法定义返回一个带有名称的符号。
func首次调用时,它由inner重新定义func。这就是为什么后续调用funcreturn 的原因1。func.func。尝试定义其他方法,您将可以在任何符号上调用它:def func
def func
1
end
end
def a
'a'
end
func.a
# 'a'
:asd.a
# 'a'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |