【问题标题】:perl6 Unable to initialize a state variable. Help neededperl6 无法初始化状态变量。需要帮助
【发布时间】:2016-12-20 08:33:34
【问题描述】:

我想使用单行打印文件的中间部分,方法是使用状态变量来指示当前行是否在文件的所需部分内。但我无法初始化状态变量。初始化如此简单,我就是找不到问题所在。请帮忙。谢谢。

文件名为 testFile.txt,包含以下几行:

section 0; state 0; not needed
= start section 1 =
state 1; needed
= end section 1 =
section 2; state 2; not needed

我的单线是

cat testFile.txt | perl6 -ne ' state $x = 0; say "$x--> "; if $_ ~~ m/ "start" / { $x=1; }; if $x == 1 { .say; }; if $_ ~~ m/ "end" / { $x = 2; }'

并且输出显示 $x=0 没有进行初始化:

Use of uninitialized value $x of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
  in block  at -e line 1
--> 
Use of uninitialized value of type Any in numeric context
  in block  at -e line 1
Use of uninitialized value $x of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
  in block  at -e line 1
--> 
= start section 1 =
1--> 
state 1; needed
1--> 
= end section 1 =
2--> 
2--> 

【问题讨论】:

    标签: variables state assign raku


    【解决方案1】:

    这在我看来是个错误:显然,-n 没有正确设置词法环境。

    作为一种解决方法,您可以将整个内容包装在一个块中,例如,用do { ... } 甚至只是{ ... } 包围您的代码。

    另请注意,根据您的用例,整个事情可以通过使用flip-flop operator 来简化,例如

    cat testFile.txt | perl6 -ne '.say if / "start" / ff / "end" /'
    

    【讨论】:

    • 感谢克里斯托夫!如果您认为这是一个错误,那么我将报告它。我认为 Perl 6 真的很酷,我真的很想看到它越来越好。我的语言偏好按顺序排列:Perl6、Scheme(MIT、Racket)、Perl5、Lisp(Clojure) 和其他语言(python、Java、C、C++、awk、Julia、汇编等)。
    • 我不明白为什么使用状态变量不起作用,所以请报告。有一些点点滴滴我并不太喜欢,但总的来说,Perl6 确实是一门相当不错的语言。目前,它还没有在实际世界中大量使用:它仍然很容易发现编译器错误,但随着时间的推移,这种情况会有所改善......
    • 我肯定会说是一个错误,因为如果您使用 state $x //= 0state $x is default(0),它就可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2017-11-10
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多