我有一个类,我希望动态接受什么类型,但仍然是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实例。
我的问题:这是可行的,如果没有,我应该为每种类型使用不同的类定义吗?
答案 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