switch get and get\!, have get take an optional block that is called if the field is not set and the block's value returned