This is accurate but unfortunately confusing. Hopefully the syntactic chiasmus of parametric inner constructors will be clarified in the process of revamping functions.
On Saturday, November 7, 2015, andrew cooke <[email protected]> wrote: > On Saturday, 7 November 2015 11:13:17 UTC-3, Yichao Yu wrote: >> >> On Sat, Nov 7, 2015 at 9:06 AM, andrew cooke <[email protected]> wrote: >> > >> > This is just blowing my mind. Can anyone explain it? >> > >> > To be clear - adding the {N} means that the "copy constructor" no >> longer >> > copies. See how mutating Foo alters both "instanced", and they both >> have >> > the same object reference. >> > >> >> You only defined inner constructor for Foo and the "copy" method you >> defined is actually a method to call `Foo{N}` (more specifically >> `call{N}(::Type{Foo{N}}, x::Foo)`) >> >> When you call `Foo(f)`, you are calling `Foo` and not `Foo{2}` (i.e. >> `call(::Type{Foo}, x::Foo{2})`) and it falls back to the no-op type >> conversion. Use `which` or `@which` to figure out what you are >> calling. >> > > i'm about to go about, but i'll check that later - sounds reasonable. > thanks! >
