休息参数问题
Rest parameter problems
我正在尝试让 class 从父 class 继承剩余参数。不幸的是,由于某种原因,继承的剩余参数的输入被视为一个完整的索引,而不是每个索引都像它自己的索引一样。
这是父级 class 的代码,其中包含一个正常工作的剩余参数:
package {
import flash.events.MouseEvent;
import flash.display.Stage;
public class SubClassText extends ClassText {
protected var parentText:ClassText;
protected var setStatValues;
protected var className:String;
protected var classType:int;
public function SubClassText(textKey:String, textName:String, stageInstance:Stage, isVisible:Boolean, alignToObject:Object, direction:String, xDistance:Number, yDistance:Number, onOverText:String, parentText:ClassText, className:String, classType:int, ... setStatValues) {
super(textKey, textName, stageInstance, isVisible, alignToObject, direction, xDistance, yDistance, onOverText);
this.parentText = parentText;
this.parentText.subClassArray.push(this);
this.setStatValues = setStatValues;
this.className = className;
this.classType = classType;
}
//Called when the player clicks this object
override protected function onClick(e:MouseEvent) {
trace(this.setStatValues.length);
Entity.getEntity("entityName", "player").setStat("className", this.className);
Entity.getEntity("entityName", "player").setStat("classType", this.classType);
for(var i:int = 0; i < this.setStatValues.length; i++) {
Entity.getEntity("entityName", "player").setStat(Main.statArray[i], this.setStatValues[i]);
}
Main.setClassVisibility(this.parentText.subClassArray, true);
}
//Adds this object to it's parent's class array
override protected function addToArray() {
Main.subClasses.push(this);
}
}
}
我在 onClick 侦听器中调用 trace()
来查看剩余参数的长度。在这个 class 的所有实例中,其余参数 returns 适当数量的输入(在这种情况下,5 因为这是一个实体有多少统计数据)。
这是扩展此父级 class 的 class:
package {
import flash.events.MouseEvent;
import flash.display.Stage;
public class AllySubClassText extends SubClassText {
private var displayName:String;
public function AllySubClassText(textKey:String, textName:String, stageInstance:Stage, isVisible:Boolean, alignToObject:Object, direction:String, xDistance:Number, yDistance:Number, onOverText:String, parentText:ClassText, displayName:String, className:String, classType:int, ... setStatValues) {
super(textKey, textName, stageInstance, isVisible, alignToObject, direction, xDistance, yDistance, onOverText, parentText, className, classType, setStatValues);
this.displayName = displayName;
}
//Called when the player clicks this object
override protected function onClick(e:MouseEvent) {
trace(this.setStatValues.length);
Main.tryAddAlly(this.displayName, this.className, this.classType, this.setStatValues);
Main.setAllyVisibility(this.parentText.subClassArray, true);
}
//Adds this object to it's parent's class array
override protected function addToArray() {
Main.allySubClasses.push(this);
}
}
}
如您所见,我有相同的剩余参数和相同的 trace()
调用。
为了更好地理解,这里有一个 SubClassText 实例的示例片段:
var beserker:SubClassText = new SubClassText("beserker", "Beserker", stage, false,
warrior, "downCenter", 0, 0, "Beserkers are crazy strong fighters", warrior, "Beserker",
0, 15, 5, 10, 10, 10);
然后我可以进入那个 SubClassText 并跟踪它的其余参数长度(setStatValues,我将从 fla 文档中跟踪它,所以现在我将制作该参数 public
而不是protected
):
trace(beserker.setStatValues.length); //5
下面是 AllySubClassText 实例的示例:
var knight:AllySubClassText = new AllySubClassText("knight", "War: The Knight",
stage, false, warriors, "downCenter", 0, 0, "War is a strong Knight", warriors, "War",
"Knight", 0, 15, 5, 10, 10, 10);
然后当我跟踪骑士实例的剩余参数长度时:
trace(knight.setStatValues.length); //1
示例片段直接取自我的代码,我只是缩短了 onHover 字符串以便于阅读。很抱歉 classes 上的大量输入,UI 代码很快需要大量参数才能正常工作。我不确定为什么所有输入都被视为一个索引而不是单独的索引。我什至知道它正在这样做,因为这是我仅跟踪其余参数时发生的情况:
trace(knight.setStatValues + ", " + knight.setStatValues.length); //15,5,10,10,10, 1
如有任何帮助,我们将不胜感激。这可能是一个小疏忽,但我现在很困惑。
问题是 ...rest
参数是一个数组。
这意味着当您将该数组作为 ...rest
参数传递给另一个函数时,它将长度为 1,因为您只传递了一个参数:单个数组。
它不会自动 "unwrap" 一个数组到它的元素中。
试试这个:
function first(...firstRest):void
{
trace(firstRest.length);
second(firstRest);
}
function second(...secondRest):void
{
trace(secondRest.length);
}
first(1,2,3);
无论如何我都不推荐使用...rest
。
创建一个包含所有状态变量的 class 并将该 class 的对象传递给构造函数。这允许您对值进行边界检查,分派更改事件以更新显示统计信息的视图等。
您在此处显示的这些构造函数调用看起来非常臃肿。
传递配置对象将有助于减少混乱。
我正在尝试让 class 从父 class 继承剩余参数。不幸的是,由于某种原因,继承的剩余参数的输入被视为一个完整的索引,而不是每个索引都像它自己的索引一样。
这是父级 class 的代码,其中包含一个正常工作的剩余参数:
package {
import flash.events.MouseEvent;
import flash.display.Stage;
public class SubClassText extends ClassText {
protected var parentText:ClassText;
protected var setStatValues;
protected var className:String;
protected var classType:int;
public function SubClassText(textKey:String, textName:String, stageInstance:Stage, isVisible:Boolean, alignToObject:Object, direction:String, xDistance:Number, yDistance:Number, onOverText:String, parentText:ClassText, className:String, classType:int, ... setStatValues) {
super(textKey, textName, stageInstance, isVisible, alignToObject, direction, xDistance, yDistance, onOverText);
this.parentText = parentText;
this.parentText.subClassArray.push(this);
this.setStatValues = setStatValues;
this.className = className;
this.classType = classType;
}
//Called when the player clicks this object
override protected function onClick(e:MouseEvent) {
trace(this.setStatValues.length);
Entity.getEntity("entityName", "player").setStat("className", this.className);
Entity.getEntity("entityName", "player").setStat("classType", this.classType);
for(var i:int = 0; i < this.setStatValues.length; i++) {
Entity.getEntity("entityName", "player").setStat(Main.statArray[i], this.setStatValues[i]);
}
Main.setClassVisibility(this.parentText.subClassArray, true);
}
//Adds this object to it's parent's class array
override protected function addToArray() {
Main.subClasses.push(this);
}
}
}
我在 onClick 侦听器中调用 trace()
来查看剩余参数的长度。在这个 class 的所有实例中,其余参数 returns 适当数量的输入(在这种情况下,5 因为这是一个实体有多少统计数据)。
这是扩展此父级 class 的 class:
package {
import flash.events.MouseEvent;
import flash.display.Stage;
public class AllySubClassText extends SubClassText {
private var displayName:String;
public function AllySubClassText(textKey:String, textName:String, stageInstance:Stage, isVisible:Boolean, alignToObject:Object, direction:String, xDistance:Number, yDistance:Number, onOverText:String, parentText:ClassText, displayName:String, className:String, classType:int, ... setStatValues) {
super(textKey, textName, stageInstance, isVisible, alignToObject, direction, xDistance, yDistance, onOverText, parentText, className, classType, setStatValues);
this.displayName = displayName;
}
//Called when the player clicks this object
override protected function onClick(e:MouseEvent) {
trace(this.setStatValues.length);
Main.tryAddAlly(this.displayName, this.className, this.classType, this.setStatValues);
Main.setAllyVisibility(this.parentText.subClassArray, true);
}
//Adds this object to it's parent's class array
override protected function addToArray() {
Main.allySubClasses.push(this);
}
}
}
如您所见,我有相同的剩余参数和相同的 trace()
调用。
为了更好地理解,这里有一个 SubClassText 实例的示例片段:
var beserker:SubClassText = new SubClassText("beserker", "Beserker", stage, false,
warrior, "downCenter", 0, 0, "Beserkers are crazy strong fighters", warrior, "Beserker",
0, 15, 5, 10, 10, 10);
然后我可以进入那个 SubClassText 并跟踪它的其余参数长度(setStatValues,我将从 fla 文档中跟踪它,所以现在我将制作该参数 public
而不是protected
):
trace(beserker.setStatValues.length); //5
下面是 AllySubClassText 实例的示例:
var knight:AllySubClassText = new AllySubClassText("knight", "War: The Knight",
stage, false, warriors, "downCenter", 0, 0, "War is a strong Knight", warriors, "War",
"Knight", 0, 15, 5, 10, 10, 10);
然后当我跟踪骑士实例的剩余参数长度时:
trace(knight.setStatValues.length); //1
示例片段直接取自我的代码,我只是缩短了 onHover 字符串以便于阅读。很抱歉 classes 上的大量输入,UI 代码很快需要大量参数才能正常工作。我不确定为什么所有输入都被视为一个索引而不是单独的索引。我什至知道它正在这样做,因为这是我仅跟踪其余参数时发生的情况:
trace(knight.setStatValues + ", " + knight.setStatValues.length); //15,5,10,10,10, 1
如有任何帮助,我们将不胜感激。这可能是一个小疏忽,但我现在很困惑。
问题是 ...rest
参数是一个数组。
这意味着当您将该数组作为 ...rest
参数传递给另一个函数时,它将长度为 1,因为您只传递了一个参数:单个数组。
它不会自动 "unwrap" 一个数组到它的元素中。
试试这个:
function first(...firstRest):void
{
trace(firstRest.length);
second(firstRest);
}
function second(...secondRest):void
{
trace(secondRest.length);
}
first(1,2,3);
无论如何我都不推荐使用...rest
。
创建一个包含所有状态变量的 class 并将该 class 的对象传递给构造函数。这允许您对值进行边界检查,分派更改事件以更新显示统计信息的视图等。
您在此处显示的这些构造函数调用看起来非常臃肿。 传递配置对象将有助于减少混乱。