我希望根据对象类型让它们进行特定的交互。
举个例子,我的系统中有四个粒子,其中两个是类型 A,另外两个是类型 B。当类型 A 的粒子进行交互时,我想要使用这个函数:
function interaction(parm1, parm2)
return parm1 + parm2
end
当B类型的对象进行交互时,我想使用这个函数。
function interaction(parm1, parm2)
return parm1 * parm2
end
当类型A与类型B交互时,我想使用函数。
function interaction(parm1, parm2)
return parm1 - parm2
end
这些函数故意设计得非常简单。
我想要计算一个基于两两交互的简单总和:
struct part
parm::Float64
end
# part I need help with:
# initialize a list of length 4, where the entries are `struct part`, and the abstract types
# are `typeA` for the first two and `typeB` for the second two. The values for the parm can be
# -1.0,3, 4, 1.5 respectively
energy = 0.0
for i in range(length(particles)-1)
for j = i+1:length(particles)
energy += interaction(particles[i].parm, particles[j].parm)
end
end
println(energy)
假设参数使用为
particle[1].parm = -1
,particle[2].parm = 3
,particle[3].parm = 4
,particle[4].parm = 1.5
,能量应考虑相互作用。(1,2) = -1 + 3 = 2
(1,3) = -1 - 4 = -5
(1,4) = -1 - 1.5 = -2.5
(2,3) = 3 - 4 = -1
(2,4) = 3 - 1.5 = 1.5
(3,4) = 4 * 1.5 = 6
energy = 1
使用if语句
做这件事几乎是琐碎的,但不可扩展。我想要一个干净、整洁的Julia方法...