小编Jas*_*ies的帖子

如何使用 Rust 中的闭包创建迭代器?

我天真地尝试这样做:

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)

rust

6
推荐指数
1
解决办法
2442
查看次数

如何最小化两个子多边形的最大纵横比?

我想使用直线将凸多边形切割成具有给定面积比的两个,使得两个子多边形的较大纵横比最小化.

我现在的方法是选择一个随机起点,计算将多边形分成目标区域的适当终点,然后计算两个纵横比中较大的一个.然后重复这么多次,直到我足够接近最小!

多边形A的纵横比定义为:

asp(A) := diam(A)^2 / area(A)

algorithm geometry partitioning polygon computational-geometry

5
推荐指数
2
解决办法
762
查看次数

D3生成的linearGradient在Firefox/IE中不起作用

我正在开发一个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中对此进行了测试,但这些也无效.

css firefox svg d3.js angularjs

4
推荐指数
1
解决办法
1817
查看次数