函数(int)是Dart中的函数(对象)吗?
根据我的说法,函数(int)是Dart中的函数(对象)吗?,dart,Dart,根据我的说法,Function(int)是Function(Object)的一个子类型,因为typeint是typeObject的子类型,因此if条件应该返回true。为什么会这样 对于这个问题,我没有得到任何好的标题,请随意更改。虽然它不是直观的,但子类型正好相反:函数(对象)是函数(int)的子类型。事实上,一个类型a可以是B的子类型,前提是任何包含B的内容也包含aFunction(Object)总是可以用int参数调用,但是Function(int)不能用任意对象调用,因此: Functi
Function(int)
是Function(Object)
的一个子类型,因为typeint
是typeObject
的子类型,因此if
条件应该返回true
。为什么会这样
对于这个问题,我没有得到任何好的标题,请随意更改。虽然它不是直观的,但子类型正好相反:
函数(对象)
是函数(int)
的子类型。事实上,一个类型a
可以是B
的子类型,前提是任何包含B
的内容也包含a
Function(Object)
总是可以用int
参数调用,但是Function(int)
不能用任意对象调用,因此:
Function foo = (int x) => x;
if (foo is Function(Object)) {
print('Bar'); // Doesn't print
}
换句话说,函数是参数类型。不是
子类型的意义在于,子类型的实例可以在任何需要超类型实例的地方使用(也称为子类型)
可以使用任何对象作为参数调用函数(对象)
。可以使用“foo”
和42
作为参数调用它。
不能使用字符串作为参数调用函数(int)
。这意味着,如果预期使用函数(对象)
,则不能替换函数(int)
,并且类型系统确实不会使函数(int)
成为函数(对象)
的子类型
它确实使Function(Object)
成为Function(int)
的子类型,因为如果一个函数可以用任何参数调用,那么它可以在需要接受int
参数的函数的任何地方使用,因为它接受int
一般来说,如果R1
是R2
的子类型,R1函数(P1)
函数类型是R2函数(P2)
的子类型,P2
是P1
的子类型,则R2函数类型是的子类型。请注意,参数类型的顺序是相反的。参数类型为
可以这样想:函数可以在这样一个地方使用:它被赋予了一个p类型的参数,并且当(并且仅当)它接受任何p参数和可能更多的参数时,它会返回一个R类型的值,并且它可能返回的值必须都是R值,但不一定都是R值
也就是说,如果函数类型至少接受p
,并且最多返回R
,那么它就是R函数(p)
的子类型。您好,谢谢您的回答。但是Function(int)
也可以用对象调用@ilove>你不能调用Function(int)
例如,用字符串,可以吗?我想你搞错了。如果你的对象是int
,比如说objectobj=1
,那么你可以用obj
@iloveah调用函数(int)
,我明白你的意思了。Dart类型的系统似乎更为宽松,因此它省略了一些函数调用的静态检查。但它仍然适用于is
运算符。需要找到它是否真的被记录在某个地方。我确信我在互联网上找不到比这更好的解释。非常感谢女士先生。
Function foo = (Object x) => x;
if (foo is Function(int)) {
print('Bar'); // prints!
}