【问题标题】:Groovy gives error expecting EOF, found '?' @ line 9, column 25Groovy 给出了期望 EOF 的错误,发现 '?' @ 第 9 行,第 25 列
【发布时间】:2018-04-10 10:10:13
【问题描述】:

我正在使用以下代码在 Groovy 中生成随机数。我可以在例如运行它Groovy Web Console (https://groovyconsole.appspot.com/) 并且它可以工作,但是当我尝试在 Mule 中运行它时它失败了。这是我使用的代码:

log.info ">>run"
Random random = new Random()
def ranInt = random.nextInt()
def ran = Math.abs(​ranInt)​%20​0;
log.info ">>sleep counter:"+flowVars.counter+" ran: "+ran
sleep(ran)

这是一个被抛出的异常:

原因: org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败:Script26.groovy:9:期待 EOF,找到“?” @ 第 9 行, 第 25 列。 def run = Math.abs(?400)?%20?0; ^

1 个错误

【问题讨论】:

    标签: groovy mule anypoint-studio


    【解决方案1】:

    第 4 行中有一些额外的 unicode 字符。如果将其转换为十六进制,您将得到:

    64 65 66 20 72 61 6e 20 3d 20 4d 61 74 68 2e 61 62 73 28 e2 80 8b 72 61 6e 49 6e 74 29 e2 80 8b 25 32 30 e2 80 8b 30 3b
    

    现在如果你把这个十六进制转换回ASCII,你会得到:

    def ran = Math.abs(​ranInt)​%20​0;
    

    在第一个() 和第一个0 之后添加了一个字符​。如果您删除它,您的代码将正确编译。

    这是精选行的十六进制:

    64 65 66 20 72 61 6e 20 3d 20 4d 61 74 68 2e 61 62 73 28 72 61 6e 49 6e 74 29 25 32 30 30 3b
    

    还有线本身:

    def ran = Math.abs(ranInt)%200;
    

    【讨论】:

    • 你是个天才:)
    • @Buddhi Nah,我之前也遇到过几次类似的问题 :)
    • 现在我得到了新问题,当 ranInt 为负数时,例如:-139709715,Math.abs 失败
    • 我也尝试使用类似 int absVal = (ranInt>0) 的代码? ranInt : (-1*ranInt) log.info ">>absVal: " + absVal 当 ranInt 为负数时它也会失败
    猜你喜欢
    • 2018-05-17
    • 2020-04-28
    • 2021-05-21
    • 1970-01-01
    • 2018-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2019-09-18
    相关资源
    最近更新 更多