From: "Einar Magnús Boson" Date: 2008-12-13T06:31:37+09:00 Subject: Re: parallel method return value On 12.12.2008, at 20:58 , Matthew Moss wrote: > > On Dec 12, 2008, at 2:21 PM, Louis-Philippe wrote: > >> Thanks Matthew, >> >> "No, because what was provided before wasn't wrong." >> >> Yeah... I believe you, but would really like it to be else! > > > Think of it this way... > > def foo > return 1, 2, 3 > end > > a = foo > > Now, you want a to be 1, but Ruby would need the power to read minds > to accommodate that. See, because if I do the same, I want a to be > [1, 2, 3]. How is foo supposed to figure that out? Or why should > your want be more/less preferable than my want? > > Simply, the interpreter can't know. There has to be some syntax or > something that gives foo, or the assignment to a, that key > information. > > Telling foo would be passing an arg: > > def foo(nargs) > return [1, 2, 3][0...nargs] > end > > a = foo(1) > > Any of the other examples come after foo is done, so: > > def foo > return 1, 2, 3 > end > > a, = foo > a = foo[0] > a = foo.first > > All three of those do the same... assign 1 to a. The latter two > request specifically the first item, while the first does parallel > assignment (of array components to particular variables... in this > case, only a). Since you seem interested in parallel assignment to a > variable number of variables, the first seems appropriate. Granted, > forgetting the comma might be easy, but there's no way for foo to > know that you want a = foo to return 1 and that someone else that > does a = foo wants [1, 2, 3]. > > > He isn't asking ruby to read minds, he is asking about overloading on expected number of return values like e.g. matlab does. But it is like everyone is saying, Ruby doesn't do that, sorry. einarmagnus