I disagree here. Knowing the order of operations/evaluation is part of knowing 
the language. If that’s the case it should be undefined (which forces a 
rewrite) not chose a behavior that seems contrary to the documentation and 
common practice in this area. 

> On Jan 15, 2020, at 1:39 PM, Axel Wagner <axel.wagner...@googlemail.com> 
> wrote:
> 
> 
> I don't think "clearly this behavior is not what you would want" is a valid 
> generalization.
> 
>   type MyStruct{
>       // …
>   }
> 
>   func (x *MyStruct) initialize() error {
>       // does some common verification and populates some internal data 
> structures
>       return nil
>   }
> 
>   func New() (*MyStruct, error) {
>       x := &MyStruct{
>            // default fields
>       }
>       return x, x.initialize()
>   }
> 
>   func NewWithFoo(f Foo) (*MyStruct, error) {
>        x := &MyStruct{
>             Foo: f,
>        }
>        return x, x.intialize()
>   }
> 
> You can say that you shouldn't do something like this, but it's IMO 
> reasonable code to write and it expects different behavior.
> 
> However, as per my previous e-mail, I would still prefer to rewrite this, of 
> course :)
> 
> 
>> On Wed, Jan 15, 2020 at 8:33 PM Robert Engels <reng...@ix.netcom.com> wrote:
>> I think the way to look at it is “what would be the behavior of if you were 
>> inline creating and initializing a struct containing both values” - clearly 
>> this behavior is not what you would want or expect. 
>> 
>> > On Jan 15, 2020, at 1:25 PM, Paul Jolly <p...@myitcv.io> wrote:
>> > 
>> > 
>> >> 
>> >>  "when evaluating the operands of an expression, assignment, or return 
>> >> statement, all function calls, method calls, and communication operations 
>> >> are evaluated in lexical left-to-right order."
>> > 
>> > My understanding goes as follows: the operands of the return statement
>> > are i and modify(&i). The comma after "return statement" in the above
>> > sentence is then important: because the only "function calls, method
>> > calls, and communication operations" in that list of operands are (is)
>> > modify(&i).
>> > 
>> > Hence when i (as in the first operand) is evaluated is not specified.
>> > And therefore it's dangerous to rely on it being one value or another
>> > (which it could be given the example you provide).
>> > 
>> > There was even some discussion at the London Gophers November 2019
>> > meetup (where the conundrum was very related
>> > https://docs.google.com/presentation/d/e/2PACX-1vQ07uP_ldnSYzpaNb5AlZZ-_tL2mZuoNfQgxvsTKSM4aglYR-nuvyrZ8nK__r3YQTo1vqH-Hmax3aXs/pub?slide=id.g6239d05d0e_0_1)
>> > about whether it would be possible to statically flag potential errors
>> > like this.
>> > 
>> > -- 
>> > You received this message because you are subscribed to the Google Groups 
>> > "golang-nuts" group.
>> > To unsubscribe from this group and stop receiving emails from it, send an 
>> > email to golang-nuts+unsubscr...@googlegroups.com.
>> > To view this discussion on the web visit 
>> > https://groups.google.com/d/msgid/golang-nuts/CACoUkn7KA0Z-TDypdvM%3Du%3DyVPHuHFmtD%3DiTV2c98Vm%3Dqn4NcPw%40mail.gmail.com.
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/golang-nuts/9EC93CAE-B11C-45E3-9D01-AC4AE5769BEE%40ix.netcom.com.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/1388A9A2-F321-459A-893E-6D90D42E7255%40ix.netcom.com.

Reply via email to