在Dart中检测动态类型

时间:2018-07-06 10:09:36

标签: dart

是否可以检测Dart中的from matplotlib import pyplot as plt import pandas as pd import numpy as np df = pd.DataFrame([1,1,1,1,1,0,0,1,1,0,1,1,0,1,0,1], columns=['grow']) df['green']=(df.grow>0) | (df.grow.shift(1)>0) df['red']= (df.grow<=0) | (df.grow.shift(1)<=0) fig, axes = plt.subplots( nrows=2, ncols=2, gridspec_kw = {'height_ratios':[1, 3]} ) axes[0,0].plot(df.index, df.grow) axes[0,0].set_title('original function') axes[1,0].fill_between(df.index, 0, 1, where=(df.grow>0) , color = 'green', alpha = 0.1) axes[1,0].fill_between(df.index, 0, 1, where=(df.grow<=0) , color = 'red', alpha = 0.1) axes[1,0].set_title('original shading') N=100 x = np.linspace(df.index[0],df.index[-1],N*len(df.index)) y = np.repeat(df.grow, N) axes[0,1].plot(x,y) axes[0,1].set_title('sharper step function') axes[1,1].fill_between(x, 0, 1, where=(y>0) , color = 'green', alpha = 0.1, lw=0) axes[1,1].fill_between(x, 0, 1, where=(y<=0) , color = 'red', alpha = 0.1,lw=0) axes[1,1].set_title('new_shading') plt.show() 类型?

我有以下方法:

dynamic

我想确定用户是否使用类型参数调用方法Stream<T> on<T>() { if (T is dynamic) { // <-- Is always true // Return the dynamic Stream. } else { // Return the Stream that was cast to Stream<T>. } } 。因此,我想区分对onmyClass.on()的调用。

在Dart 2及更高版本中有可能吗?

1 个答案:

答案 0 :(得分:3)

在Dart 2(由于具有通用方法)中,由于没有区别,因此无法在运行时区分类型dynamic和类型Object

dynamicObject之间的区别仅在编译时存在,在编译时,您可以在静态类型为dynamic的值上调用任何方法,而在该类型上没有很多方法静态类型为Object的内容。差异会影响编译,但是在编译之后,可以对类型执行的操作仅限于检查对象是否是该类型的实例(所有对象都是Objectdynamic的实例),或者一个类型是否是另一个的子类型(Objectdynamic具有相同的子类型和超类型,并且彼此都是子类型和超类型,它们是完全等效的wrt。子类型)。

您测试if (T is dynamic)是没有意义的,它将T转换为表示类型的Type对象,并且该类型对象是一个对象,并且所有对象都是({{{ 1}}检查)is

您可以尝试dynamic,只有在T是“顶部类型”(包括if (new Object() is T)dynamicObject的T才可以成功)。 或者,您也可以尝试使用void来获得相同的结果(如果没有,则是我们将解决的错误-因为if (T == dynamic)应该为真)。

总而言之,您不应尝试在Dart 2中检测Object == dynamic,因为它在运行时实际上并不特殊。

您无法检查用户是否传递了类型参数,因为类型参数是可选的,并且如果用户不添加一个,则将提供由类型变量的边界(dynamic计算的一个/ dynamic)。