什么是指针语言?

时间:2015-12-18 21:09:02

标签: callback

我正在努力清楚地了解回调是什么。我发现了这篇文章:what-is-a-callback-function。回答问题提到回调的用户8bitjunkie因其在指针语言中的使用方式而被命名。我最初基于名称的假设使我认为指针语言是一种可以直接操作指针的语言。所以我想知道c ++是否是指针语言,如果我的初始假设不正确;什么是指针语言。据我所知,它似乎不是典型的语言不可知术语。如果是,则由与指针的使用相关的结果覆盖。

1 个答案:

答案 0 :(得分:0)

回调并不是允许直接操作指针的语言所特有的 - 但这就是“指针语言”。我会把我的答案集中在回调上,因为这似乎是你的主要困惑。

回调可用Java,Python,JavaScript和许多隐藏指针的语言。

回调只是一个将在另一个函数结束时执行的函数。通常,这对异步任务很有用,因为它允许您以特定方式响应任务而不会阻塞。

例如,我将使用Java - 一种具有托管内存的语言,无法直接访问指针。使用function pointers实现回调的本机方式越多,我认为这就是您的文章对“指针语言”的意义。但我宁愿告诉你回调是什么以及如何在没有指针的情况下一次性使用它们,所以Java就是这样。

在这个例子中,我们将有一个像这样定义的接口。

public interface CallBack {
   public void onFinished(boolean success);
}

此回调接口允许我们使用预定义方法声明对象,该方法将响应成功或失败。然后我们可以像这样定义一个Runnable类。

public class CBObject implements Runnable {
    private CallBack myCallback;

    public CBObject(CallBack myCallback) {
        this.myCallback = myCallback;
    }

    public void run() {
        boolean success = false;
        // do some stuff, set success = true if it works
        myCallback.onFinished(success); // this calls the callback
    }
}

然后,如果我们想要使用这个回调,我们将做这样的事情。

public void doSomethingAsynchronous(CallBack callback) {
    CBObject cb = new CBObject(callback);
    Thread task = new Thread(cb);
    task.start();
}

这将异步运行此任务,但允许用户对其成功或失败作出反应。

我希望这有帮助!