我可以在方法的默认参数中使用变量吗?如果没有,那么为什么呢?这是红宝石1.8.7
var = "one"
def sysout(str=var)
puts str
end
sysout("seven")
sysout()
错误 -
seven
test.rb:3:in `sysout': undefined local variable or method `var' for main:Object (NameError)
from test.rb:8
答案 0 :(得分:4)
你可以使用任意任意的Ruby表达式作为可选参数的默认参数值,你可以放在那里绝对没有限制。它可以像单个文字一样简单,也可以像整个应用程序一样复杂。 (虽然我不推荐后者。)
但Ruby的范围规则并没有神奇地消失。局部变量仍然是局部变量,全局变量仍然是全局变量,依此类推。
块是Ruby中唯一创建嵌套作用域的东西,所以你必须使用一个块:
var = 'one'
define_method(:sysout) do |str=var|
puts str
end
sysout('seven')
# seven
sysout
# one
或者,您可以将默认值设为方法:
def var; 'one' end
def sysout(str=var)
puts str
end
sysout('seven')
# seven
sysout
# one
或全局变量:
$var = 'one'
def sysout(str=$var)
puts str
end
sysout('seven')
# seven
sysout
# one
答案 1 :(得分:0)
您可以使用变量,但您定义的局部变量var
不会与sysout
方法定义的参数位置共享范围。