【问题标题】:How to do 'function pointers' in Rascal?如何在 Rascal 中执行“函数指针”?
【发布时间】:2014-12-06 18:43:18
【问题描述】:

Rascal 是否支持函数指针或类似的东西来像 Java 接口一样执行此操作?

本质上,我想从公共逻辑块中提取特定(更改)逻辑作为单独的功能。要使用的函数被传递给公共块,然后调用这个函数。在 C 中,我们可以使用函数指针或 Java 中的接口来做到这一点。

首先我想知道这个一般概念在语言设计界是如何称呼的。

我查看了 Rascal 函数帮助页面,但这没有提供关于这方面的说明。

例如我有:

int getValue(str input) { 
 .... } 

int getValue2(str input){ 
  ... } 

现在我想说:

 WhatDatatype? func = getValue2; // how to do this?

现在我可以将它传递给另一个函数,然后:

 int val = invoke_function(func,"Hello"); // how to invoke?, and pass parameters and get ret value

发送,

乔斯

【问题讨论】:

    标签: rascal


    【解决方案1】:

    导师的这个页面有一个使用高阶函数的例子,这是最接近函数指针的Rascal特性:

    http://tutor.rascal-mpl.org/Rascal/Rascal.html#/Rascal/Concepts/Functions/Functions.html

    您可以定义匿名(未命名)函数,在 Java 中称为闭包;将它们分配给变量;将它们作为参数传递给函数(高阶函数);等等。这是一个例子:

    rascal>myfun = int(int x) { return x + 1; };
    int (int): int (int);
    
    rascal>myfun;
    int (int): int (int);
    
    rascal>myfun(3);
    int: 4
    
    rascal>int applyIntFun(int(int) f, int x) { return f(x); }
    int (int (int), int): int applyIntFun(int (int), int);
    
    rascal>applyIntFun(myfun,10);
    int: 11
    

    第一个命令定义了一个增量函数int(int x) { return x + 1; },并将其分配给变量myfun。如果不是这样,其余代码的工作方式相同

    int myfun(int x) { return x + 1; }
    

    第二个命令只显示类型,它是一个接受并返回int 的函数。第三条命令调用值为3 的函数,返回4。然后第四个命令显示一个函数,该函数将函数作为参数。然后将使用参数x 调用此函数参数f。最后的命令只是展示了一个使用它的例子。

    【讨论】:

    • 谢谢,这正是我想要的。顶部
    猜你喜欢
    • 2017-03-11
    • 2012-01-19
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多