Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数(int)是Dart中的函数(对象)吗?_Dart - Fatal编程技术网

函数(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)
的一个子类型,因为type
int
是type
Object
的子类型,因此
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!
}