perl6 – “我的$foo”有什么范围,它用于什么?
使用正则表达式,标记或规则,可以像这样定义变量;
token directive { :my $foo = "in command"; <command> <subject> <value>? } 语言文档here中没有任何内容,S05 – Regexes and Rules中的内容很少,引用; 任何语法正则表达式实际上只是一种方法,你可以使用冒号后跟任何由Perl 6语法解析的范围声明符来声明变量,包括my,my,state和constant. (作为准声明符,temp和let也被识别.)单个语句(通过终止分号或行结束右括号)被解析为普通的Perl 6代码: token prove-nondeterministic-parsing { :my $threshold = rand; 'maybe' s+ <it($threshold)> } 我在语法中得到的regexen与类中的方法非常相似;我知道你可以在一个规则内的任何地方启动一个块,如果解析成功到达那个点,那么块将被执行 – 但我不明白这个东西到底是什么. 有人可以清楚地定义它的范围;解释它需要满足什么,并给出典型的用例? 解决方法
范围是什么:我的$foo;有?
:我的$foo ……;拥有它出现的规则/令牌/正则表达式的lexical scope. (而且:我的$* foo ……; – 请注意额外的*表示动态变量 – 具有它出现的规则/令牌/正则表达式的词汇和dynamic scope.) 这是用来做什么的 这是没有这个结构会发生的事情: regex scope-too-small { # Opening `{` opens a regex lexical scope. { my $foo = / bar / } # Block with its own inner lexical scope. $foo # ERROR: Variable '$foo' is not declared } grammar scope-too-large { # Opening `{` opens lexical scope for gramamr. my $foo = / bar / ; regex r1 { ... } # `$foo` is recognized inside `r1`... ... regex r999 { ... } # ...but also inside r999 } 所以 : … ;语法用于获得完全所需的范围 – 既不太宽也不太窄. 典型用例 此功能通常用于大型或复杂的语法中,以避免松散的范围(产生错误). 有关精确词汇范围的合适示例,请参阅 P6支持action objects.这些类的方法与语法中的规则一一对应.只要规则匹配,它就会调用相应的操作方法. Dynamic variables提供了正确的范围,用于声明作用于块的变量(方法,规则等),它们以词法和动态方式声明 – 后者意味着它们也可以在相应的操作方法中使用.有关此示例,请参见the declaration of (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |