从函数返回值和语句

时间:2015-04-20 17:18:33

标签: rascal

我想知道使用return语句和使用模式foo() = Expression

定义函数之间的行为差​​异

我的理解来自:Funtions,功能正文可以是= Expressionreturn可以取消或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所以能够定义分配和返回修改后的映射的函数会很好。

也许我在这里错过了一些东西。

1 个答案:

答案 0 :(得分:1)

你的理解很好。 return语句有一些额外的灵活性,但允许返回由选定语句类型产生的值,例如'对于'和任务显然也是如此。请参阅Rascal语法here

中的return语句的语法定义

在将来的版本中,我们可以删除所有限制并允许在任何地方使用语