我试图做以下事情:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
lattd, lngtd = [], []
# latitude, longitude and station names are as headers rows(rows starting with "#", in plot_file.txt.
# read all the lines and make lists for latitude and longitude
inputfile = open('data-por-IN/plot_file.txt', 'r')
for i, line in enumerate(inputfile):
if line.startswith('#'):
lattd.append(int(line[56:62])/10000)
lngtd.append(int(line[65:71])/10000)
m = Basemap(width=4000000,height=4000000,projection='lcc',
resolution='c',lat_1=45.,lat_2=55,lat_0=20,lon_0=80.)
m.drawmapboundary(fill_color='aqua')
m.drawcountries()
m.drawcoastlines(linewidth=0.50)
m.fillcontinents(color='green', alpha = 0.6, lake_color='aqua')
for i in range(len(lngtd)):
lon = lngtd[i] #77.580643
lat = lattd[i] #12.972442
xpt,ypt = m(lon,lat)
lonpt, latpt = m(xpt,ypt,inverse=True)
m.plot(xpt,ypt,'yo')
ax.bluemarble()
plt.show()
但当然,我收到以下投诉:
let str_result: Js.Nullable.t(string) = Js.Nullable.return("something");
let int_result: Js.Nullable.t(int) = Js.Nullable.fromOption(Some(5));
Js.log([|str_result, int_result|]);
所以我使用Error: This expression has type Js.Nullable.t(int) = Js.nullable(int)
but an expression was expected of type
Js.Nullable.t(string) = Js.nullable(string)
Type int is not compatible with type string
:
string_of_int
但是我遇到了以下问题:
Js.log([|str_result, string_of_int|]);
使用This has type:
Js.Nullable.t(int) (defined as Js.nullable(int))
But somewhere wanted:
int
的正确方法还是有其他方法可以做到这一点?
答案 0 :(得分:1)
您可以使用Js.Nullable.t
更改Js.Nullable.bind
的“内部”类型:
let str_of_int_result: Js.Nullable.t(string) =
Js.Nullable.bind(int_result, (. n) => string_iof_int(n));
或者,您可以将Js.Nullable.t
转换为option
,模式匹配,然后可选地将其再次包装在Js.Nullable.t
中:
let str_of_int_result: Js.Nullable.t(string) =
switch (Js.Nullable.toOption(int_result)) {
| Some(n) => Js.Nullable.return(string_of_int(n)))
| None => Js.Nullable.null
};
为了便于比较,这些是等效的。如果你想让它保持Js.Nullable.t
,你通常会想要使用第一种方法,如果不想,你可以使用第二种方法。
答案 1 :(得分:0)
在使用ReasonReact Ref访问DOM节点时,我正在使用以下内容将DOM节点作为对象(也称为Js.t<'a>
)进行访问。
let nodeRef = React.useRef(Js.Nullable.null)
...
switch Js.Nullable.toOption(nodeRef.current) {
| None => ()
| Some(node) => {
let node = ReactDOMRe.domElementToObj(node)
node["scrollTop"] = node["scrollHeight"]
}
}
...
<main ref={ReactDOM.Ref.domRef(nodeRef)}>