我已经定义了以下最小的Peg.js语法:
start = "A1" / "A123"
Run Code Online (Sandbox Code Playgroud)
您可以在沙箱中尝试.
我本来期望匹配"A1"以及"A123"(根据我的回溯如何运作的概念).但事实并非如此:语法识别"A1"但不识别"A123".
注意:我不是在寻找"颠倒你的术语顺序"的建议,如相关问题如何将简单语法转换为适用于PEG.js的东西(预期"a"但发现"a").相反,我希望了解我所看到的行为,以及为什么Peg.js的回溯在这种情况下不适用.有关为什么颠倒我的术语顺序没有帮助的解释,请参阅下面更实际的示例.
有关更实际的示例,请考虑单元解析.语法应该识别具有可选前缀的度量单位(如"m","mol"),如"mm","mmol",以及非"公制"单位,如"yr","week"或"mo".
以下Peg.js语法不会识别"mol",因为它会消耗掉"mo",并且不会回溯.(改变术语的顺序没有帮助;或者更确切地说,将导致"mo"以"mol"或"mmol"为代价被识别.)
start = nonmetric / metric / prefix metric
metric = "mol" / "l" / "m" / "g"
nonmetric = "yr" / "mo" / "week" / "day" / "hour"
prefix = "m" / "k" / "c"
Run Code Online (Sandbox Code Playgroud)
我可以在Antlr中做出类似的事情取得圆满成功:
grammar units;
start : nonmetric | metric | prefix metric;
metric : 'mol' | 'l' | 'm' | 'g';
nonmetric : 'yr' | 'mo' | 'week' | 'day' …Run Code Online (Sandbox Code Playgroud) 我Docker version 1.4.1, build 5bc2ff8在Ubuntu 14.04上运行.当我docker run任何容器,几分钟后我的docker0桥"死",容器停止能够到达网络.在连接终止之前,运行ifconfig报告docker0具有inet addr类似的设备:
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[... etc.]
Run Code Online (Sandbox Code Playgroud)
但是在连接死后,ifconfig显示ipv4地址已经消失:
docker0 Link encap:Ethernet HWaddr 56:84:7a:fe:97:99
inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8116 errors:0 dropped:0 overruns:0 frame:0
TX packets:15995 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2444859 (2.4 MB) TX bytes:17440729 (17.4 …Run Code Online (Sandbox Code Playgroud) 该OAuth2用户SAML承载规范描述了应用程序如何提出一个断言令牌端点作为授权拨款.例如,Salesforce的API允许这种方法使应用程序能够自动请求用户帐户的访问令牌(只要用户已经获得了带外权限).
不过,我无法理解断言的含义.大部分都很清楚,例如
Issuer 是生成(和签署)断言的一方Subject 是要为其帐户请求访问令牌的用户AudienceRestriction 将受众限制为令牌端点.但我无法理解以下含义:
AuthnStatement - 我对SAML规范的理解是,该断言的发布者正在声明它(发行者)已经对该主题进行了认证.这是正确的吗?
SubjectConfirmation - 谁在这里确认什么?SAML规范有助于说明此元素"允许确认主题的信息".但什么是确认?谁执行它,以及如何,何时,为了什么目的?
这是一段代码,它给了我一个StackOverflowError(从我的代码库中的实际示例中简化):
( ->> (range 3000)
(mapcat #(concat [0] (take 100 (repeat %))))
(reduce (constantly nil))
(count))
Run Code Online (Sandbox Code Playgroud)
(注:此代码是不是为了做除了说明问题或返回零任何东西.)
我可以通过以下任何步骤"拯救"它:
reduce行[0]到 '(0)(take 100000000)在mapcat和之间的任何点添加(或任何整数)count.我基本上对这种行为感到困惑(特别是#2).我很感激任何意见.
(我有一种感觉这可能与为什么reduce在Clojure中给出一个StackOverflowError有关?但是我不知道如何 - 所以如果它是相关的,我会理解为什么会这样解释.)
我在模块中有一组需要访问某些共享初始化时间状态的函数.实际上,我想用静态可变矢量来模拟这个:
static mut defs: Vec<String> = vec![];
fn initialize() {
defs.push("One".to_string());
defs.push("Two".to_string());
}
Run Code Online (Sandbox Code Playgroud)
(示例:http://is.gd/TyNQVv,失败,"可变静态不允许有析构函数".)
我的问题类似于是否可以在Rust中使用全局变量?,但使用a Vec(即带有析构函数的类型),因此Option基于该问题的解决方案似乎不适用.也就是说,这失败的错误与我的第一次尝试相同:
static mut defs: Option<Vec<String>> = None;
fn initialize() {
let init_defs = vec![];
init_defs.push("One".to_string());
init_defs.push("Two".to_string());
defs = Some(init_defs);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法访问在初始化时填充并在运行时可见的静态("全局")向量?
是否有其他模式我应该考虑支持这个用例?传递对状态向量的显式引用是可能的,但会混乱大量的函数签名,这些函数签名都需要访问此状态.
我想启动Kubernetes工作,并给它一个固定的截止日期。如果在截止日期到来之前吊舱仍在运行,我希望该作业自动终止。
是否存在这样的东西?(起初我以为Job规范activeDeadlineSeconds涵盖了这个用例,但现在我看到这activeDeadlineSeconds仅限制了重试作业的时间;它不会主动杀死慢速/失控的工作。)
根据https://docs.microsoft.com/zh-cn/azure/devops/pipelines/library/service-endpoints,服务连接类型丰富。我可以轻松地在项目级别管理一组服务连接,并设置权限以限制哪些用户可以查看/编辑它们-一切都很好。
但是我无法弄清楚如何在构建管道中使用脚本步骤访问服务连接。例如,假设我有一个服务连接,代表一个Azure服务主体的凭据。我想在脚本步骤中访问这些凭据。
如何编写一个使用它们的脚本步骤?
我有一个要求xpp3,我表达的是:
// TestScript.groovy
@Grab(group='xpp3', module='xpp3', version='1.1.3.4.O')
import org.xmlpull.v1.XmlPullParserFactory;
println "Created: " + XmlPullParserFactory.newInstance()
Run Code Online (Sandbox Code Playgroud)
运行$ groovy TestScript.groovy失败
捕获:org.xmlpull.v1.XmlPullParserException:由:org.xmlpull.v1.XmlPullParserException引起:
但是,如果我手动将Grape提取的.jar添加到我的Groovy类路径中:
$ groovy -cp ~/.groovy/grapes/xpp3/xpp3/jars/xpp3-1.1.3.4.O.jar \
TestScript.groovy
Run Code Online (Sandbox Code Playgroud)
......然后一切正常.
假设我创建了一个简单的任务elm-repl,例如:
> forty = Task.succeed 40
<task> : Task.Task a number
Run Code Online (Sandbox Code Playgroud)
我怎么拿我的forty......用它?我可以将其Task转换为Cmd通道:
> Task.perform (\x -> Nothing) (\a -> Just a) forty
{ type = "leaf", home = "Task", value = T <task> }
: Platform.Cmd.Cmd (Maybe.Maybe Float)
Run Code Online (Sandbox Code Playgroud)
...但我不确定这是否会让我更接近我的目标,因为我不知道如何"强制"命令(例如将其值打印到屏幕上).
我正在努力将一个简单的递归函数变成一个简单的迭代器。问题在于递归函数在其局部变量和调用堆栈中维护状态 - 将其转换为 Rust 迭代器意味着基本上将所有函数状态外部化为某些自定义迭代器结构上的可变属性。这是一个相当混乱的尝试。
在像 javascript 或 python 这样的语言中,yield它可以解决这个问题。Rust 中是否有任何技术可以帮助管理这种复杂性?
使用的简单示例yield(伪代码):
function one_level(state, depth, max_depth) {
if depth == max_depth {
return
}
for s in next_states_from(state) {
yield state_to_value(s);
yield one_level(s, depth+1, max_depth);
}
}
Run Code Online (Sandbox Code Playgroud)
为了在 Rust 中进行类似的工作,我基本上在迭代器结构上创建一个,以反映调用堆栈的每个级别Vec<Vec<State>>返回的数据。next_states_from然后,对于每次next()调用,小心地将其弹出以恢复状态。我觉得我可能错过了一些东西。
containers ×2
docker ×2
rust ×2
assertions ×1
azure ×1
azure-devops ×1
classpath ×1
clojure ×1
connectivity ×1
dependencies ×1
elm ×1
grammar ×1
groovy ×1
iterator ×1
jobs ×1
kubernetes ×1
mutability ×1
networking ×1
node.js ×1
oauth-2.0 ×1
peg ×1
pegjs ×1
recursion ×1
ruby-grape ×1
saml ×1
static ×1
thunk ×1