Raku “范围”是什么“我的$foo”;它有什么用途?
使用正则表达式、令牌或规则,可以这样定义变量Raku “范围”是什么“我的$foo”;它有什么用途?,raku,Raku,使用正则表达式、令牌或规则,可以这样定义变量 token directive { :my $foo = "in command"; <command> <subject> <value>? } 令牌指令{ :my$foo=“in command”; ? } 语言文档中没有关于它的内容,引述的内容也很少 任何语法正则表达式实际上只是一种方法,您可以在这样的例程中使用冒号声明变量,冒号后跟Perl 6语法解析的任何范围声明符,包括my、our、
token directive {
:my $foo = "in command";
<command> <subject> <value>?
}
令牌指令{
:my$foo=“in command”;
?
}
语言文档中没有关于它的内容,引述的内容也很少
任何语法正则表达式实际上只是一种方法,您可以在这样的例程中使用冒号声明变量,冒号后跟Perl 6语法解析的任何范围声明符,包括my、our、state和constant。(作为准声明符,temp和let也可以识别。)单个语句(通过终止分号或最后一行右括号)被解析为正常的Perl 6代码:
令牌证明非确定性解析{
:my$threshold=rand;
“可能”\s+
}
我发现语法中的正则表达式与类中的方法非常相似;我知道你可以在一个规则中的任何地方启动一个块,如果解析成功,这个块就会被执行——但我不明白这到底是为了什么
有人能清楚地定义它的范围是什么吗;解释它满足什么需求,并给出典型用例 的作用域是什么:我的$foo代码>有吗?
:我的$foo
具有其出现的规则/令牌/正则表达式的名称
(和:my$*foo…;
——请注意,表示动态变量的额外*
——具有其出现的规则/token/regex的词法和语法。)
这是用来干什么的
以下是没有此构造时会发生的情况:
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
}
因此,:代码>语法用于精确地获得所需的范围——既不太宽也不太窄
典型用例
此功能通常用于大型或复杂的语法中,以避免范围过宽(这会滋生bug)
有关精确的词汇范围界定的适当示例,请参见中的@extra_tweaks
的声明和使用
P6支持。这些类的方法与语法中的规则一一对应。只要规则匹配,它就会调用相应的操作方法。为声明作用域为块(方法、规则等)的变量提供准确的作用域。它们在词汇和动态中都被声明——后者意味着它们在相应的操作方法中也可用。有关此示例,请参见和
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
}