Я хочу, чтобы объекты взаимодействовали с конкретными c взаимодействиями в зависимости от их типа.
Пример проблемы: у меня четыре частицы, две из которых относятся к типу A, а 2 - к типу B., когда взаимодействуют типы A I хочу использовать функцию
function interaction(parm1, parm2)
return parm1 + parm2
end
при взаимодействии типа B Я хочу использовать функцию
function interaction(parm1, parm2)
return parm1 * parm2
end
, когда тип A взаимодействует с типом BI хочу использовать функцию
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
почти тривиально, но не расширяемо. Я после чистого, аккуратного подхода Джулии ...