Error: undefined local variable or method 'var' for top-level
Error: undefined local variable or method 'var' for top-level
我是 crystal 编程语言的新手。
每当我 运行 这个代码:
var = ARGV.find { |x| x.split(".").size == 4 } || "0.0.0.0"
ARGV.delete(var)
Addr = var.split(".").map { |x| x.to_i { 0 } }.join(".")
p Addr
使用 crystal,我得到一个错误:
Showing last frame. Use --error-trace for full trace.
In q.cr:4:8
4 | Addr = var.split(".").map { |x| x.to_i { 0 } }.join(".")
^--
Error: undefined local variable or method 'var' for top-level
但每当我省略最后一行 p Addr
,或将 var
替换为 Var
,代码似乎都可以正常工作。
Crystal版本:
Crystal 0.31.1 (2019-10-21)
LLVM: 9.0.0
Default target: x86_64-pc-linux-gnu
我的代码有什么问题?
这是一个小问题,我们希望将来能收到更好的错误消息。
所以这个难题的第一步是理解 var
是一个局部变量,因为它以小写字母开头,而 Addr
是一个常量,因为它以大写字母开头。
由于常量初始值设定项的原因,所以在常量赋值中 =
符号之后的代码在第一次访问常量时是 运行 惰性的。因此,它们存在于自己的范围内,无法引用顶级范围内定义的局部变量。
因此,对于您的示例,可以采用三种方法。首先通过调用 addr
使 Addr
成为局部变量。其次通过调用 Var
将 var
提升为常量。或者第三次将您的整个代码放入常量初始化程序中:
Addr = begin
ip = ARGV.find { |arg| arg.count('.') == 3 } || "0.0.0.0"
ARGV.delete(ip)
ip.split('.').map { |part| part.to_i { 0 } }.join('.')
end
三者中哪一个最好主要取决于品味和程序结构。
我是 crystal 编程语言的新手。
每当我 运行 这个代码:
var = ARGV.find { |x| x.split(".").size == 4 } || "0.0.0.0"
ARGV.delete(var)
Addr = var.split(".").map { |x| x.to_i { 0 } }.join(".")
p Addr
使用 crystal,我得到一个错误:
Showing last frame. Use --error-trace for full trace.
In q.cr:4:8
4 | Addr = var.split(".").map { |x| x.to_i { 0 } }.join(".")
^--
Error: undefined local variable or method 'var' for top-level
但每当我省略最后一行 p Addr
,或将 var
替换为 Var
,代码似乎都可以正常工作。
Crystal版本:
Crystal 0.31.1 (2019-10-21)
LLVM: 9.0.0
Default target: x86_64-pc-linux-gnu
我的代码有什么问题?
这是一个小问题,我们希望将来能收到更好的错误消息。
所以这个难题的第一步是理解 var
是一个局部变量,因为它以小写字母开头,而 Addr
是一个常量,因为它以大写字母开头。
由于常量初始值设定项的原因,所以在常量赋值中 =
符号之后的代码在第一次访问常量时是 运行 惰性的。因此,它们存在于自己的范围内,无法引用顶级范围内定义的局部变量。
因此,对于您的示例,可以采用三种方法。首先通过调用 addr
使 Addr
成为局部变量。其次通过调用 Var
将 var
提升为常量。或者第三次将您的整个代码放入常量初始化程序中:
Addr = begin
ip = ARGV.find { |arg| arg.count('.') == 3 } || "0.0.0.0"
ARGV.delete(ip)
ip.split('.').map { |part| part.to_i { 0 } }.join('.')
end
三者中哪一个最好主要取决于品味和程序结构。