actionscript-3 - 为什么这个属性/函数名称冲突会在 AS3 中编译?

标签 actionscript-3 class syntax properties

在 ActionScript 3.0 中,编译:

public function set func(value:Function):void
{

}

public function func():void
{

}

这不是:

public function set someVar44(value:int):void
{

}

var someVar44:int;

为什么第一个编译?我想 Adob​​e 可能只是专门和武断地决定阻止它用于变量并允许它用于函数,但允许它用于函数或变量似乎没有任何意义。我怀疑这里还有更多的故事。我没有看到什么?

最佳答案

这真的很有趣,需要大量挖掘才能深入了解(尽管答案似乎非常明显)。

如您所知,变量/属性不能在同一范围内以相同的名称声明。因此 set function someVar44() 和变量 someVar44 直接冲突(除了尝试初始化变量两次的问题)。相反,如果您尝试过:

public function get func(value:Function):void
{

}

您可能会遇到类似的重复函数定义错误问题。那么,为什么 set 函数似乎可以让您克服这些错误呢?由于 setter 和 getter 以访问和改变类的属性而闻名,因此它们似乎也被视为类属性而不是典型的方法,但情况并非完全如此。事实上,只有 setter 显示为公共(public)接口(interface)的属性,另一方面,getter 是一种可以读取属性的方法。

二传手:

public function set func(value:Function):void

完全像对象的属性一样读取,并且没有任何其他属性与其直接冲突(即 - 没有像 var func 这样的当前属性。)您不会收到编译器错误.

来自土坯:

set Defines a setter, which is a method that appears in the public interface as a property.

get Defines a getter, which is a method that can be read like a property.

我相信这就是为什么您在使用 set 方法时没有遇到编译器错误的原因。尽管如果您尝试访问该 set 方法,则会立即假定函数 func() 具有优先权。也就是说,如果您尝试 this.func = function():void { },您将收到错误:

Error #1037: Cannot assign to a method func

关于actionscript-3 - 为什么这个属性/函数名称冲突会在 AS3 中编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586757/

相关文章:

c++ - 类析构函数中的堆损坏?

excel - vba 中单元格的语法

haskell - 如何从记录haskell中提取多个值

javascript - 在另一个对象中访问对象属性

apache-flex - Air Flex 最大同时上传 URL 请求数

ios - AIR 2.7 for iOS 在后台播放音频?

flash - 在 Windows 上将 AIR 应用程序(而非安装程序)打包为单个 EXE

Ruby 设计模式问题 - 类/模块继承

c++ - 类(class)传承与友元项目

actionscript-3 - 如何在AS3(Adobe Air2.5)中录制音频并保存为mp3格式?