Hello all,
I have a question about the usage of circular references in types. In a
project I am working on, I am running into several situations where this
type of design appears to be the best issue. For example, let's say I have
this (this is a massive simplification but illustrates my point):
```
abstract TermStructure
type Bond
rate::Float64
ts::TermStructure
mat_date::Date
end
function Bond(rate::Float64, mat_date::Date)
ts = NullTermStructure()
return Bond(rate, ts, mat_date)
end
type NullTermStructure <: TermStructure end
type PiecewiseYieldCurve <: TermStructure
settlement::Date
bonds::Vector{Bond}
end
function PiecewiseYieldCurve(settlement::Date, sched::Schedule,
rate::Float64)
bonds = Vector{Bond}(length(sched))
for (i, d) in enumerate(sched)
new_bond = Bond(rate, d)
bonds[i] = new_bond
end
pyc = PiecewiseYieldCurve(settlement, bonds)
for b in bonds
b.ts = pyc
end
return pyc
end
```
Firstly, I guess, is this the best implementation? There are situations
where I need the bonds of the PiecewiseYieldCurve to be aware of the
TermStructure to which they are connected. Secondly, do I take a
performance hit from this? The PiecewiseYieldCurve instance will have
parts of it updated as I run some of my pricer methods (not shown).
Thanks!
Chris