<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div><br></div><div>On Feb 26, 2017, at 7:00 PM, Derrick Ho <<a href="mailto:wh1pch81n@gmail.com">wh1pch81n@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">Well, I have found these discussions...<div><br></div><div>It was marked as a <a href="https://bugs.swift.org/browse/SR-128">bug</a> and then directed to <a href="https://github.com/ArtSabintsev/swift-evolution/blob/5ef676ec2616465c1cb854f82e3fd4e90b4b09c6/proposals/array-variadic-function.md">swift evolution</a>.</div><div><br></div><div>@jose, the prefix operator you mention looks good, but in the past discussions they wanted a postfix operator so that it would match the declaration. I think I like the postfix operator.</div><div><br></div><div>func foo(_ a: String...) {}</div><div><br></div><div>foo(["a", "b", "c"]...) //<- This looks clear. It is turning the array into a variadic argument.</div></div></div></blockquote><div><br></div>This is problematic because of the similarities with the proposed one sided ranges in the new String manifesto. These operations produce slices which are collection.<div><br><div><span style="background-color: rgba(255, 255, 255, 0);">c[i...]... // first dots one sided range, second the spread operator. </span></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="background-color: rgba(255, 255, 255, 0);">a prefix ... operator would be a little better here but just barely. </span></div><div><span style="background-color: rgba(255, 255, 255, 0);">...c[i...] </span></div><div><span style="background-color: rgba(255, 255, 255, 0);"><br></span></div><div><span style="background-color: rgba(255, 255, 255, 0);">I think a prefix of * or ... would work great for declaring and deconstructing. </span></div><div><div><span style="background-color: rgba(255, 255, 255, 0);">func foo(_ a: ...[Int]) {} // declared as array required. </span></div><div><span style="background-color: rgba(255, 255, 255, 0);">foo(...[1,2,3,4])</span></div><div><span style="background-color: rgba(255, 255, 255, 0);">foo(...(0,1,2,3))</span></div><div><br></div></div><div><span style="background-color: rgba(255, 255, 255, 0);">func foo(_ a: *[Int]) {}</span></div><div>foo(*[1,2,3,4])</div><div>foo(*(0,1,2,3))</div><div>foo(1,2,3,4)</div><div><br></div><div><div><blockquote type="cite"><div><div dir="ltr"><div><br></div><div>However, that thread was closed because it wasn't "discussed" enough prior making the pull request.</div><div><br></div><div>therefore, if people want it, they got to cast their vote in here by either supporting it or opposing it.</div><div><br></div><div>I like my original suggestion since it is more explicit.</div><div><br></div><div><div>foo(["a", "b", "c"] as String...) </div><div><br></div></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Sun, Feb 26, 2017 at 7:59 PM Jose Cheyo Jimenez <<a href="mailto:cheyo@masters3d.com">cheyo@masters3d.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">On Feb 26, 2017, at 8:26 AM, Derrick Ho via swift-evolution <<a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a>> wrote:</div><br class="m_-2241817684941310197Apple-interchange-newline gmail_msg"><div class="gmail_msg"><div dir="ltr" class="gmail_msg">In swift, a variadic argument can become an array without too much effort.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">func foo(_ va: String...) {</div><div class="gmail_msg"> let a: [String] = va</div><div class="gmail_msg">}</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">However, it seems odd to me that an array can not be converted into a variadic argument</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">foo(["a", "b", "c"]) // <-error</div><div class="gmail_msg">foo("a", "b", "c") // no error<br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><a href="http://stackoverflow.com/questions/24024376/passing-an-array-to-a-function-with-variable-number-of-args-in-swift" class="gmail_msg" target="_blank">Other people have wondered about this too.</a><br class="gmail_msg"></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">According to <a href="https://devforums.apple.com/message/970958#970958" class="gmail_msg" target="_blank">this thread</a> Doug Gregor says it is due to some type ambiguity. with Generics.</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">If type ambiguity is the issue, Do we have the option to cast it to the correct type?</div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">foo(["a", "b", "c"] as String...) // <- error. doesn't consider String... to be a type.<br class="gmail_msg"></div></div></div></blockquote><div class="gmail_msg"><br class="gmail_msg"></div></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><div class="gmail_msg">I think this needs to be done with a spread operator in order to disambiguate. </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">foo(...["a", "b", "c”] </div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator" class="gmail_msg" target="_blank">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator</a></div><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">I like the idea. Its syntactic sugar so I am not sure how open the core team would be to adding it. </div><br class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg"></div></blockquote></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg"><div dir="ltr" class="gmail_msg"><div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">What does the community think? Should we be granted some mechanism to turn an array into a variadic argument?</div></div></div></blockquote></div></div><div style="word-wrap:break-word" class="gmail_msg"><div class="gmail_msg"><blockquote type="cite" class="gmail_msg"><div class="gmail_msg">
_______________________________________________<br class="gmail_msg">swift-evolution mailing list<br class="gmail_msg"><a href="mailto:swift-evolution@swift.org" class="gmail_msg" target="_blank">swift-evolution@swift.org</a><br class="gmail_msg"><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" class="gmail_msg" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br class="gmail_msg"></div></blockquote></div><br class="gmail_msg"></div></blockquote></div>
</div></blockquote></div></div></div></body></html>