【发布时间】:2020-11-27 07:36:39
【问题描述】:
我想让对象根据它们的类型与特定的交互进行交互。
示例问题:我有四个粒子,两个是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 statements 执行此操作几乎是微不足道的,但不可扩展。我追求干净、整洁的 Julia 方法......
【问题讨论】:
标签: julia abstract-data-type multiple-dispatch