"Int should be Void -> Int" 比较两个整数时

"Int should be Void -> Int" when comparing two integers

所以这对我来说是新的。当我尝试比较 2 个整数时,错误告诉我 Int 应该是 Void -> Int,这是我以前从未见过的。

代码:

public static function whenTouchEnds(event:TouchEvent){
        for (item in currentTouches){
            if (item.getId == event.touchPointID){
                currentTouches.remove(item);
                trace("removed touch");
                break;
            }
        }
    }

按照Haxe文档,我也尝试过:

public static function whenTouchEnds(event:TouchEvent){
        for (item in currentTouches){
            if (item.getId == event.touchPointID) break;
        }
    }

为了试错(这里是业余程序员)甚至尝试过:

public static function whenTouchEnds(event:TouchEvent){
        for (item in currentTouches){
            var itemID:Int = item.getId;
            var touchID:Int = event.touchPointID;
            if (itemID == touchID){
                currentTouches.remove(item);
                trace("removed touch");
                break;
            }
        }
    }

他们都给了我同样的错误信息"Int should be Void -> Int"。这是我创建的 Touch class,其中 returns 一个具有 getId 函数的整数:

class Touch
{
    public var id:Int = 0;
    public var xPos:Int = 0;
    public var yPos:Int = 0;

    public function new(Id:Int, X:Int, Y:Int) 
    {
        id = Id;
        xPos = X;
        yPos = Y;
    }

    public function getX() : Int
    {
        return (xPos);
    }

    public function getY() : Int
    {
        return (yPos);
    }

    public function getId() : Int
    {
        return (id);
    }
}

我不是在寻找一个简单的解决方案,而是在寻找我在这里缺少的东西的解释。越学越好!

干杯

罪魁祸首是这一行:

if (item.getId == event.touchPointID)

由于没有括号,您实际上并不是 calling 此处的 getId() 函数 - 您是将其与整数进行比较(这没有意义)。试试这个:

if (item.getId() == event.touchPointID)

Void -> Int 是 Haxe 对 function type 的表示法,特别是一个不带参数 (Void) 和 returns 整数的函数。您正在将这样的函数与 Int 进行比较,因此错误消息“Int 应该是 Void -> Int”。


一个小的代码风格批评:Touch class 中的 get* 函数似乎没有任何作用,无论如何变量都是 public。如果您想做一些比在 getter 函数中返回变量更复杂的事情,您可能需要考虑使用 properties