- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对于监控系统,我需要评估由 bool 表达式表示的自定义检查。例如,我有一个简单的伪代码条件(它们可以更复杂):
if (webservice is unavailable) and (there are no emails about planned downtime)
如果可能,我想使用 short-circuit evaluation在这里,如果 webservice 可用(并且第一个条件为 false
),则不会评估第二部分,因为总的结果无论如何都是 false
。因此,我可以避免在不必要时连接到邮件服务器(以及其他耗时的操作)。
这是我要实现的目标的示例:
class WebserviceDownCheck {
boolean check() {
println 'Checking webservice'
return false
}
}
class NoDowntimeEmailCheck {
boolean check() { //shouldn't be executed
println 'Checking emails'
return true
}
}
//using string evaluation, because conditions are constructed during runtime
Eval.me("${new WebserviceDownCheck().check()} && ${new NoDowntimeEmailCheck().check()}")
输出是:
Checking webservice
Checking emails //shouldn't be there
Result: false
NoDowntimeEmailCheck().check()
不应执行,因为第一个条件已经是 false
。我试过:
GroovyShell
而不是 Eval
check()
方法更改为字段并应用 @Lazy
转换${new WebserviceDownCheck().check()}
更改为 ${ -> new WebserviceDownCheck().check()}
(看到了 here) 似乎我需要一些惰性机制,它允许我在 Eval
(或 GroovyShell
)已经在执行它时初始化 GString
。可能类似于 GroovyShell
的惰性 Binding
。
我想知道,是否可以不编写自定义字符串评估逻辑以某种方式实现?
最佳答案
把它组合成一个表达式,像这样:
Eval.me("${new WebserviceDownCheck().check() && new NoDowntimeEmailCheck().check()}")
如果结果为假,则只评估第一个。
关于groovy - 由 Eval 或 GroovyShell 执行时的惰性 GString 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371589/
我有一个这样的字符串 def fileName = "$prefix-$currDate.gz" .gz 是文件的扩展名,而不是属性,我得到的异常是没有这样的属性。 有办法逃脱吗?我试过了\。这没有用
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 10年前关
不应跨越一定数量的字符/行(例如 80 个字符)的 Groovy 错误消息的标准(或最佳实践)是什么? 考虑以下(工作正常) throw new IOException("""\ A
我正在使用 groovy 扩展遗留脚本系统。源脚本是“类 java”的,因此它主要解析为带有少量预处理的 groovy 脚本。 我使用 invokeMethod() 和 missingMethod()
您好,如何使用数据库存储的 GString 定义来动态生成数据。如果代码中定义了格式,我可以使用 GString 来选择行属性 code_format = "${-> row.ACCOUNT} ${-
在“Groovy and Grails recipes”一书中,我使用了以下代码片段: String HelloLanguage = "def hello(language) {return \"He
我在映射中存储了一些 GString,并尝试在运行时评估它们: //this is in begginning of my class or controller or service and is
我尝试使用 gstring 访问嵌套字段,但它抛出异常 groovy.lang.MissingPropertyException 我有两个类 Class Person{ Address addr
我有一个 Groovy 脚本。在 Java 中,我通过 Binding 提供: binding.put( 'a','Hello') 我通过 GroovyShell 运行脚本,结果是: print "$
使用 GStrings 可以访问对象的属性,包括嵌套属性。但是如何访问列表属性中的第 n 个元素呢? class Foo { List elements } class Bar { Stri
我想学习如何在 GString 中转义点,因此 groovy (1.8) 不会将其视为 sql.execute 中变量的一部分。我有以下代码: Map dbSettings = [schemaNa
我有以下代码: def test( name ) { s = ['$','{','n','a','m','e','}'].join() println s instanceof St
Groovy 有一个 GString 的概念。我可以这样写代码: def greeting = 'Hello World' println """This is my first program ${
使用以下代码片段我无法从 map 中检索 gString: def contents = "contents" def gString = "$contents" def map = [(gStrin
我想存储一个用户可配置的 GString ,该 GString 将绑定(bind)到一个域类,但我在找到一个很好的解决方案时遇到了问题。 示例( 概念/伪/非工作 ) class Person{
我们是否有硬性能数据证明单引号相对于双引号的优势?大多数人会更习惯使用双引号。 我知道当我们计算表达式时可以使用GString,并执行惰性计算 最佳答案 这里是 09 年完成的一些测试的链接: htt
如果我只使用 "/home/user/.some/qwe" 而不是 homedir->str,它就可以工作。 struct stat st = {0}; GString* homedir = g_st
我正在阅读 https://groovy-lang.org/closures.html#this 中的 Groovy 闭包文档.有一个关于 GString 行为的问题。 Closures in GSt
这在 GSP 页面中按预期工作: ${Foo.findAllByBar(bar)} 但是当添加收集语句时,代码会中断.. ${Foo.findAllByBar(bar).collect { it.na
我希望有人向我解释为什么以下内容是正确的: def t = "test" assert [test: 1] == ["test": 1] // 1. expected assert ["$t": 1
我是一名优秀的程序员,十分优秀!