是否可以检测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>.
}
}
。因此,我想区分对on
和myClass.on()
的调用。
在Dart 2及更高版本中有可能吗?
答案 0 :(得分:3)
在Dart 2(由于具有通用方法)中,由于没有区别,因此无法在运行时区分类型dynamic
和类型Object
。
dynamic
和Object
之间的区别仅在编译时存在,在编译时,您可以在静态类型为dynamic
的值上调用任何方法,而在该类型上没有很多方法静态类型为Object
的内容。差异会影响编译,但是在编译之后,可以对类型执行的操作仅限于检查对象是否是该类型的实例(所有对象都是Object
和dynamic
的实例),或者一个类型是否是另一个的子类型(Object
和dynamic
具有相同的子类型和超类型,并且彼此都是子类型和超类型,它们是完全等效的wrt。子类型)。
您测试if (T is dynamic)
是没有意义的,它将T
转换为表示类型的Type
对象,并且该类型对象是一个对象,并且所有对象都是({{{ 1}}检查)is
。
您可以尝试dynamic
,只有在T是“顶部类型”(包括if (new Object() is T)
,dynamic
和Object
的T才可以成功)。
或者,您也可以尝试使用void
来获得相同的结果(如果没有,则是我们将解决的错误-因为if (T == dynamic)
应该为真)。
总而言之,您不应尝试在Dart 2中检测Object == dynamic
,因为它在运行时实际上并不特殊。
您无法检查用户是否传递了类型参数,因为类型参数是可选的,并且如果用户不添加一个,则将提供由类型变量的边界(dynamic
计算的一个/ dynamic
)。