orangy
by
gets called once and result is stored in a field. Then, every access to property goes to getValue() function applicable to the stored data, passing receiver (Layer in the above example) to the getValue’s first parameter. In the above example to achieve what is (probably) expected we would need to store Lazy instance for each Layer, which would be really weird for compiler to do.