gpt4 book ai didi

haxe - 为什么 Haxe 编译器在从具有通用 (Int) 返回类型的函数返回动态 (String) 时不会提示?

转载 作者:行者123 更新时间:2023-12-02 09:15:35 24 4
gpt4 key购买 nike

我想知道为什么下面的 Haxe 代码可以编译:

class Test<T> { // 1
var l:List<Dynamic> = new List<Dynamic>(); // 2
public function new() {} // 3
public function add(d:Dynamic):Void { l.add(d); } // 4
public function get():T { return l.pop(); } // 5
public static function main() { // 6
var t:Test<Int> = new Test<Int>(); // 7
t.add("-"); // 8
trace(t.get()); // 9
} // 10
}

我看到的编译问题:

如第 1 行所示,此类有一个类型参数 T。第 7 行指定 TInt。因此 get() 函数(第 5 行)应该只返回 Int。然而,神奇的是,这个函数返回一个String(第 9 行)。

那么......为什么编译器不提示这个?

最佳答案

A dynamic value can be assigned to anything; and anything can be assigned to it.

根据Haxe手册:https://haxe.org/manual/types-dynamic.html

lList<Dynamic>l.pop() 的结果也将是Dynamic 。这将隐式转换为 Int当它在 get() 返回时.

我认为追踪 line 9 处的值时的运行时行为将取决于 Haxe 目标。

如果你改变l进入List<T>并制作 add()采用 T 类型的参数,那么编译器就会提示。试试这个:https://try.haxe.org/#11327

class Test<T> { // 1
var l:List<T> = new List<T>(); // 2
public function new() {} // 3
public function add(d:T):Void { l.add(d); } // 4
public function get():T { return l.pop(); } // 5
public static function main() { // 6
var t:Test<Int> = new Test<Int>(); // 7
t.add("-"); // 8 - this won't compile anymore
trace(t.get()); // 9
} // 10
}

关于haxe - 为什么 Haxe 编译器在从具有通用 (Int) 返回类型的函数返回动态 (String) 时不会提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com