<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div>Yup 😀<br><br><div>Sent from my moss-covered three-handled family gradunza</div></div><div><br>On Nov 18, 2016, at 12:18 AM, Xiaodi Wu <<a href="mailto:xiaodi.wu@gmail.com">xiaodi.wu@gmail.com</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr">I believe Dave had a design more like this in mind:<div><br></div><div>```<br><div><div>struct _View<T> {</div><div> let array: Array<Any></div><div> subscript(index: Int) -> T? {</div><div> guard index >= 0 && index < array.count else { return nil }</div><div> return array[index] as? T</div><div> }</div><div>}</div><div><br></div><div>extension Array {</div><div> var double: _View<Double> {</div><div> return _View(array: self)</div><div> }</div><div>}</div></div><div>```</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 18, 2016 at 2:00 AM, Adrian Zubarev via swift-evolution <span dir="ltr"><<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_markdown"><p>Hi Dave,</p>
<p>Thank you for your answer. I have to admit this is a ‘workaround’ but it will make everything even worse.</p>
<p>From:</p>
<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">public func scopedJavaScript(at index: Int) -> (javaScript: String, scope: Document)?
</code></pre>
<p>To:</p>
<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">public subscript(at index: Int) -> (javaScript: String, scope: Document)?
public var scopedJavaScript: Array {
get { return self }
set { /* implementation artifact */ }
}
</code></pre>
<p>Now I could write code like <code>array.scopedJavaScript.scopedJ<wbr>avaScript.scopedJavaScript</code> and so one, which makes no sense any more.</p>
<p>Where we could simply allow:</p>
<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">public subscript scopedJavaScript(at index: Int) -> (javaScript: String, scope: Document)?
</code></pre>
<p>This would ensure that the user can only write something like:</p>
<pre><code class="gmail-m_-4091591652219577513m_-7333948024739528437swift">array.scopedJavaScript[at: 42] // get the value
array.scopedJavaScript[at: 42] = (…, …) // set the value
</code></pre>
<ul>
<li>Is there anything that speaks against optionally named subscripts?</li>
<li>Technical reasons?</li>
<li>Swiftiness?</li>
</ul>
<p></p></div><div class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_original_html"><span><div id="gmail-m_-4091591652219577513m_-7333948024739528437bloop_customfont" style="font-family:helvetica,arial;font-size:13px;color:rgb(0,0,0);margin:0px"><br></div> <br> <div id="gmail-m_-4091591652219577513m_-7333948024739528437bloop_sign_1479455258346931968" class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_sign"><div style="font-family:helvetica,arial;font-size:13px">-- <br>Adrian Zubarev<br>Sent with Airmail</div></div> <br></span><div><div class="gmail-m_-4091591652219577513h5"><p class="gmail-m_-4091591652219577513m_-7333948024739528437airmail_on">Am 17. November 2016 um 23:33:44, Dave Abrahams via swift-evolution (<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>) schrieb:</p> <blockquote type="cite" class="gmail-m_-4091591652219577513m_-7333948024739528437clean_bq"><span><div><div></div><div><br>on Thu Nov 17 2016, Adrian Zubarev <<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>> wrote:<br><br>> Dear Swift community,<br>><br>> while building a framework for BSON I had the following idea.<br>><br>> Here is a snippet of some code I do have in my module:<br>><br>> extension Array where Element == Document.Value {<br>><br>> public func double(at index: Int) -> Double? {<br>><br>> guard self.startIndex <= index && index < self.endIndex else { return nil }<br>><br>> if case .double(let double) = self[index] {<br>><br>> return double<br>> }<br>> return nil<br>> }<br>><br>> …<br>> }<br>> This function is used to query the array and check if the element at the given index is of a<br>> specific type. Now I would like also to implement a semi-schema setter.<br>><br>> The problem that I see, is the ugliness of the subscript I’d create.<br>><br>> Currently the code would read nicely let d = array.double(at: 42), but after change to a subscript<br>> the API would look odd array[doubleAt: 42] = 5.0.<br>><br>> Don’t get me wrong here, I also have methods with larger names like public func scopedJavaScript(at<br>> index: Int) -> …. You can easily imagine that such subscripts would look ugly<br>> array[scopedJavaScriptAt: 123] = ….<br>><br>> I propose to align the design of subscript with functions where one could optionally give subscript<br>> a name.<br>><br>> func name(label parameter: Type) -> ReturnType<br>><br>> subscript optionalName(label parameter: Type) -> ReturnType<br>> This change would make my API nice and<br>> clean. array.scopedJavaScript[at: 213] = …<br><br>You do that by giving your Array a scopedJavaScript property, and<br>making that indexable.<br><br>-- <br>-Dave<br><br>______________________________<wbr>_________________<br>swift-evolution mailing list<br><a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br><a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br></div></div></span></blockquote></div></div></div><div class="gmail-m_-4091591652219577513m_-7333948024739528437bloop_markdown"><p></p></div></div><br>______________________________<wbr>_________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div></div></div>
</div></blockquote></body></html>