About Methods(中文)
方法是一种特殊类型的属性,它只是指向一个函数。通常,该函数设计为对对象中包含的数据进行操作。
例如,假设你想修改 Customer 对象,使其包含一个函数,该函数返回应按邮寄标签上打印方式显示的客户邮寄地址。Customer 对象已包含构成此地址的字段,但形式不正确。
你可以构建一个单独的函数来按如下方式构造地址:
Customer_mailingaddress(obj):=
obj.name+"\n"+
obj.address+"\n"+
obj.city+" "+obj.state+" "+obj.zipcode
此函数接受一个 Customer 对象作为输入参数,然后通过按正确顺序连接正确的字段来构造地址。你可以按如下方式调用此函数:
更好的方法是将 mailingaddress 函数作为对象本身的一部分。为此,你必须修改 Customer 对象构造函数,以按如下方式定义一个附加属性:
Customer(name):={
.name=name;
.address="";
.city="";
.state="";
.zipcode=0;
.phonenumber="";
.mailingaddress=Customer_mailingaddress;
}
接下来,修改函数 Customer_mailingaddress,将所有出现的参数 obj 替换为对 this 的引用,并移除输入参数。
Customer_mailingaddress(none):=
this.name+"\n"+
this.address+"\n"+
this.city+" "+this.state+" "+this.zipcode
参见此项。
请记住,在 DScript 中,为此使用关键字是可选的,因此你可以按如下方式简化定义:
现在,你可以通过调用对象的 mailingaddress 方法来获取任何 Customer 对象的邮寄地址:
当你执行对象的方法时,关键字 this 指向的是对象本身。这使你无需将对象作为参数传递。
请注意,即使函数 Customer_mailingaddress 不接受任何参数,该函数也定义了一个名为 none 的哑参数。这样做是为了确保 Customer_mailingaddress 被定义为函数而不是常量。如果 Customer_mailingaddress 被定义为
或
则对象构造函数中的最后一行
会将属性 mailingaddress 设置为等于 Customer_mailingaddress 的值,而不是将其设置为指向该函数的指针。