From what I understand, the first example consumes the closure right away, effectively resulting in an error, since, well, there isn't a closure anymore, only the resulting value.
I would have expected the two expressions to yield identical results and I can't wrap my head around why they don't
I think you have found the right way to write your code for now. We can still talk about the details.
The first code needs a small fix to syntax. The right way to call a closure in a field is (self.calculation)(arg). This makes sure there is a difference between a method and a field called calculation - and here it is a field.