【问题标题】:Grails wrong evaluation of expressionGrails对表达式的错误评估
【发布时间】:2015-02-12 05:24:39
【问题描述】:

我在我的服务类中编写了一个函数,我在其中评估从控制器传递的参数,但 Grails 返回错误的评估结果。

 def list(String q,String qval,String srt,String ord){
 log.debug("q==="+q)
 log.debug("qval==="+qval)
 log.debug("srt==="+srt)
 log.debug("order==="+ord)

所有这些调试语句都按预期打印 null。现在

boolean qvalbool=qval?.trim()
log.debug("qvalbool===>>"+qvalbool) prints true!!!

!StringUtils.isEmpty(q) && !StringUtils.isEmpty(qval) returns true!!

这两个语句在返回 true 时都应该返回 false 这是怎么回事?有什么想法吗?

我正在使用 grails 2.4.2

【问题讨论】:

  • 也许输入是“null”作为字符串?这就是为什么您在打印它们时看到 null 的原因?
  • 输入为空,但条件结果应为假,而显示为真
  • 运行调试器并检查确切的值是什么。正如@evanwong 提到的 - 你可能会得到"null" 而不是null,这就是为什么其他条件被评估为true。如果你想打印精确的数据类型,试试log.debug(q?.dump()),看看你得到的是null还是<String@23e... value=null>

标签: grails groovy


【解决方案1】:

Evan Wong 的评论很可能是正确的,您看到的是一个包含单词 null 的字符串。

通常当 Groovy 打印出值时,它们的类型并不明显。

groovy:000> null
===> null
groovy:000> 'null'
===> null

同样在 Groovy 中,表达式 null + '' 的计算结果为字符串 'null'

这将是一种简单的方法来更改此参数的值,使其包含字符串“null”。

【讨论】:

  • 谢谢,这是我将 '' 添加到 null 的问题,结果为 'null'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2023-02-06
  • 2021-04-15
相关资源
最近更新 更多