Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ada中类似于Java的自引用;这是什么;?_Java_Ada_Self Reference - Fatal编程技术网

Ada中类似于Java的自引用;这是什么;?

Ada中类似于Java的自引用;这是什么;?,java,ada,self-reference,Java,Ada,Self Reference,在Java中,我们可以使用“this”来自引用对象。《美国残疾人法案》中是否有类似的规定?或者所有参数都需要显式传递吗?Ada中没有等效的参数,因为定义对象操作的机制不同。在Java和大多数其他著名的OO语言中,方法定义是类型(类)定义的一部分: public class MyClass { public String getName() { ... } } getName是在MyClass中定义的,因此是对MyClass对象进行操作的实例方法。实际上,getName()的代码有一个类

在Java中,我们可以使用“this”来自引用对象。《美国残疾人法案》中是否有类似的规定?或者所有参数都需要显式传递吗?

Ada中没有等效的参数,因为定义对象操作的机制不同。在Java和大多数其他著名的OO语言中,方法定义是类型(类)定义的一部分:

public class MyClass {
    public String getName() { ... }
}
getName
是在
MyClass
中定义的,因此是对
MyClass
对象进行操作的实例方法。实际上,
getName()
的代码有一个类型为
MyClass
的隐式参数,在
getName()
的主体中,关键字
this
用于引用该隐式参数。其他一些语言使用
self
而不是
this

Ada不是这样做的;不能在记录类型定义中定义
过程
函数
(尽管受保护类型定义允许这样做)。要定义对象上的操作,
过程
函数
记录
类型(或类型扩展)定义之外定义,其中一个参数(通常是第一个(*)为记录类型:

type My_Class is tagged record 
    ...
end record;

function Get_Name (Obj : My_Class) return String;  
    -- note that this is outside the "record" .. "end record"
显式参数是Ada如何知道这是My_类的一个操作——没有其他方法可以告诉它,因为函数不必立即遵循记录定义。因为没有隐式参数,所以只需使用显式参数的名称,
Obj
,来引用对象。许多Ada程序员使用名称
This
Self
作为参数名,使其看起来与其他语言类似

(*)如果任何参数的类型为
My_Class
,且其定义在与
My_Class
类型相同的“声明列表”中,则过程或函数仍然可以是
My_Class
的操作

type My_Class is tagged record .. end record;
function Get_Something (N : Integer; Obj : My_Class) return String;

这是
My_Class
的一个基本操作,它是多态的(它可以分派给派生类型的重写函数),但不能说
X.Get_Something(3)
,因为
My_Class
参数不是第一个参数。

它不是重复的:链接的答案特定于任务对象;这个问题一般涉及对象。代替回答:您可以在每个对象的方法中命名第一个形式参数
this
,以达到通常的效果。对此进行扩展:在Ada中,方法(子程序)操作的对象是一个显式参数,通常是第一个参数(它必须是使用对象操作符号的第一个参数)。因此,您只需使用参数名称。在Java和其他语言中,它是隐式的,您可以使用
this
self
来引用此隐式参数。我看到的许多Ada代码都使用
this
self
作为第一个参数的名称,但这是一种风格决定。