比较两个整数时,“Int应该是Void - > Int”

时间:2018-02-19 22:46:31

标签: haxe

所以对我来说这是一个新的。当我尝试比较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类,它返回带有getId函数的Integer:

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);
    }
}

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

干杯

1 个答案:

答案 0 :(得分:2)

罪魁祸首就是这条线:

if (item.getId == event.touchPointID)

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

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

Void -> Int是Haxe对function type的表示法,特别是一个不带参数(Void)并返回整数的函数。您将此类函数与Int进行比较,因此错误消息“Int应为Void -> Int”。

一个小代码风格的批评:get*类中的Touch函数似乎并没有用于任何目的,无论如何变量都是公共的。如果您想要做一些比在getter函数中返回变量更复杂的事情,您可能希望改为使用properties