在julia函数中定义变量时,出现关于该行未定义变量的错误

时间:2018-08-03 23:02:59

标签: function variables while-loop undefined julia

问题

我正在编写Julia脚本,该函数中有一个while循环。在while循环中有一个变量。实际上,那行引发了关于未定义变量的错误。

代码

错误在第65行

function cleanTexLoop(fileName::String)
    f = open(fileName, "r")
    while ! eof(f)
        line = readline(f), <-- line 65
        #line = sentenceFilter(line)
        println(line)
    end
    close(f)
end

该函数打开一个文件,该文件被传递到循环中。循环一直运行到文件末尾。循环时,逐行读取文件。每次读取时,该行都存储在变量line中,文件前进。在正确的版本中,没有注释掉一行(66),但是对于调试来说,它是注释掉的。然后将line用作过滤器的输入,该过滤器会在再次将其存储为line之前修改该行。该脚本的最终版本将具有四个过滤器,但现在,我很乐意让它仅使用零个过滤器来运行。

(请注意,用户已经指出了一个逗号,看了几个小时的代码仍在暗示着我。我正在等待那个用户写下答案)

错误消息

  

cleanTexLoop(“ test.tex”)
  错误:UndefVarError:未定义行   Stacktrace:
  [1]位于/home/nero/myScripts/latexCleaner.jl:65
的cleanTexLoop(:: String)   [2] ./REPL.jl:97处的宏扩展[内联]
  [3](:: Base.REPL。## 1#2 {Base.REPL.REPLBackend})()在> ./event.jl:73

以前的工作版本

我以前写过这个版本的另一个版本,该版本可以完整使用,但是我需要对其结构进行一些实质性更改,以便更好地适应将来的计划。请注意,其中一些名称不符合常规的命名约定。即,我使用“!”当实际上没有更改任何变量时。

function CleanTexLoop(fileName::String,regX::String,sub::String)
    f = open(fileName, "r")
    while ! eof(f)
        println(applySub!(f,regX,sub))
    end
    close(f)
end

function applySub!(file::IOStream,regX::String,sub::String)
    return replace(
        readline(file),
        Base.Regex(regX),
        Base.SubstitutionString(sub)
    )
end

一个简单的循环,演示为什么应该这样做

x = 0
while x < 4
   y = x
   println(y)
   x = x+1
end

正如预期的那样,此打印结果从零到一,并且据我所知,可以代表我在做什么。在这两种情况下,我都将一些变量传递到循环中,该循环通过某种动作定义了循环内的另一个变量,然后将其打印出来。为什么行之有效,而另一个却不行。

我在Google上看到的内容。

从查找此问题开始,似乎在循环或类似环境之外定义变量时,由于无法将其传递到环境中而导致问题出现。但是,这不是我的情况。就我而言,该变量是首次定义。

1 个答案:

答案 0 :(得分:0)

如评论中所述,问题是一个错误的逗号。