我天真地尝试这样做:
struct Foo<'a, S: Send, T:Send> {
next_:Box<Fn<(&'a mut S,), Option<T>> + Send>,
state:S
}
impl<'a, S: Send, T: Send> Iterator<T> for Foo<'a, S, T> {
fn next(&mut self) -> Option<T> {
return self.next_.call((&mut self.state,));
}
}
Run Code Online (Sandbox Code Playgroud)
要创建迭代器,我可以使用闭包轻松发送到任务。
然而,它会产生可怕的生命周期不匹配错误:
<anon>:8:33: 8:48 error: cannot infer an appropriate lifetime for borrow expression due to conflicting requirements
<anon>:8 return self.next_.call((&mut self.state,));
^~~~~~~~~~~~~~~
<anon>:7:5: 9:6 help: consider using an explicit lifetime parameter as shown: fn next(&'a mut self) -> Option<T>
<anon>:7 fn next(&mut self) …Run Code Online (Sandbox Code Playgroud) 我想使用直线将凸多边形切割成具有给定面积比的两个,使得两个子多边形的较大纵横比最小化.
我现在的方法是选择一个随机起点,计算将多边形分成目标区域的适当终点,然后计算两个纵横比中较大的一个.然后重复这么多次,直到我足够接近最小!
多边形A的纵横比定义为:
asp(A) := diam(A)^2 / area(A)
algorithm geometry partitioning polygon computational-geometry
我正在开发一个D3库,它将D3与AngularJS指令集成在一起,称为AngularD3.最近的一个指令允许生成可以绑定到数据并动态更新的渐变.这似乎适用于除Firefox之外的所有浏览器.但是,如果我将输出SVG复制/粘贴到像JSFiddle这样的东西它可以正常工作,那么静态就可以了.
这可能是Firefox处理SVG动态更新的限制/错误吗?
这是一个演示页面,您可以在其中看到这在Chrome和Safari中有效,但在Firefox中无法使用:
https://wealthbar.github.io/angular-d3/
此代码可通过Github存储库获得.
D3能够使用大致相同的代码创建与Firefox一起使用的渐变.你可以在Mike的例子中看到这一点.到目前为止,我能找到的唯一区别是对linearGradient的动态更新.
以下是<defs>使用DOM浏览器中的"copy outer html"直接从Firefox复制的SVG部分,供参考(格式化为可读性):
<defs>
<linearGradient y2="100%" y1="0%" x2="100%" x1="0%" id="gradient">
<stop offset="0%" stop-color="#098aae" stop-opacity="0.6"></stop>
<stop offset="100%" stop-color="#684684" stop-opacity="0.9"></stop>
</linearGradient>
</defs>
Run Code Online (Sandbox Code Playgroud)
最近在IE 10和11中对此进行了测试,但这些也无效.