我想知道使用return
语句和使用模式foo() = Expression
我的理解来自:Funtions,功能正文可以是= Expression
而return
可以取消或Expression
我问的原因是,通过我对文档的理解,以下内容不应该起作用:
map[int,int] foo(map[int,int] env) = env[0] = 1;
它没有(导致解析错误),因为赋值是Statement
。但是,如果我稍微修改这个功能:
map[int,int] foo(map[int,int] env) { return env[0] = 1; }
这似乎有效。我很困惑,因为我虽然return
只应该表达。此外,它看起来像在REPL上玩这个赋值返回一个Value
所以能够定义分配和返回修改后的映射的函数会很好。
也许我在这里错过了一些东西。
答案 0 :(得分:1)
你的理解很好。 return语句有一些额外的灵活性,但允许返回由选定语句类型产生的值,例如'对于'和任务显然也是如此。请参阅Rascal语法here
中的return语句的语法定义在将来的版本中,我们可以删除所有限制并允许在任何地方使用语