将默认值分配给T:Float类型参数

时间:2017-09-12 19:55:54

标签: haxe

我有一个类,我希望动态接受什么类型,但仍然是float类型。我在下面添加了一个示例类。简单地说,我想要一个可以包含Ints或Floats(或抽象(Float))的类,但是类型参数不喜欢被赋予实际适合它的东西。

class Container<T:Float>
{
    public function new(aValue:T = 0.0) 
    {
    }

    public function example():T 
    {
        return 16.0;
    }

在这个例子中,我得到两个编译器错误。第一个是构造函数new(aValue:T = 0.0的默认值。一个简单的解决方法是将值设置为动态,但我喜欢我的代码比这更整洁。第二个错误是example()的返回值。它不会让我返回16.0,因为它不是T实例。

我的问题:这是可行的,如果没有,我应该为每种类型使用不同的类定义吗?

2 个答案:

答案 0 :(得分:3)

我认为这里的问题是你真的不需要通用类型“T”。

这是我提出的约束条件。 “Container”类不是通用的,只包含一个Float构造函数。但是,这仍允许它接受任何可以隐式转换为Float的值,只要它们定义了转换规则,它就包含任何abstract

package ;

class Main
{
    public static function main()
    {
        new Container(); // default
        new Container(1); // Int
        new Container(2.3); // Float
        new Container(new UnifiesWithFloat(4.5)); // Float abstract
    }
}

class Container
{
    public function new(aValue:Float = 0.8) 
    {
        trace('aValue is $aValue');
    }
}

abstract UnifiesWithFloat(Float) from Float to Float
{
    inline public function new(value:Float)
    {
        this = value;
    }
}

答案 1 :(得分:1)

我可以使用from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.uix.textinput import TextInput class Screen(GridLayout): def __init__(self, **kwargs): super(Screen, self).__init__(**kwargs) self.input = TextInput(multiline=False, size_hint = (None, None)) self.add_widget(self.input) self.input.bind(on_text_validate=self.print_input) def print_input(self, value): """function to convert Textinput text into a matrix""" ans1 = [i for i in list(value.text) if i != ','] new = [] for i in range(len(ans1)): if ans1[i] == "-": n = ans1[i] + ans1[i + 1] # concatenate "-" and the next item after it ans1.remove(ans1[i]) # delete "-" ans1.remove(ans1[i+1]) # delete the next element after "-" new.append(n) new.append(ans1[i]) # the list new can now be converted into a matrix of which dimension depends on the list class MyApp(App): def build(self): return Screen() if __name__ == '__main__': MyApp().run() 并自行解析可选参数来解决此问题的唯一方法。

if ans1[i] == "-":
 IndexError: list index out of range

此日志:
cast