【发布时间】:2016-02-11 22:08:54
【问题描述】:
我正在尝试将开源 C# 程序的一部分移植到 java 中,并且遇到了一段完全没有意义的代码,我无法在线找到任何语法解释,并且没有工具提示或甚至是 MCVS 中给出的运算符的名称,以便进行更具体的搜索。
branch 是一种“Particle3D”类型,表示 3d 位置和旋转。 行为是 void 函数(Particle3D)的委托(我已将其替换为 java 中的简单抽象类)。
根据视觉工作室的说法,b 是一个临时的 Particle3D。
这里到底发生了什么?看起来这是将一个particle3D分配给代表一个将Particle3D作为参数的函数的委托,过去我不知道=>运算符或以下代码块的含义,我假设它以某种方式重载(这是为branch.Behavior分配一个未命名的函数吗?)
branch.Behaviour = b =>
{
LeavesBehaviour(b);
BranchingBehaviour(branchingPercent, b, depth + 1);
// weight behaviour
if (applyWeightOnBranches)
b.Direction = new Vector3D(initialDirection.X, initialDirection.Y * LineairScaleTo((double)b.Life / (double)branch.MaxLife, -1f, 1f), initialDirection.Z);// +(2 * (((double)b.Life / (double)maxLife)) - 1);
};
我的最终目标是让它在 java 中正常工作,其余代码全部移植而没有任何实际问题。
【问题讨论】:
-
检查 'lambda' 不,它是 => 不是 >= !
-
b => {}是一个匿名函数。相当于方法签名void anonymousMethod(Particle3D b) { [...] } -
在 Java 中你可能会写类似
brach.behaviour = b -> { ... }的东西。 -
这只是在 Java 8 中引入