> Chris Lattner wrote:
> 
>       let np = Python.import("numpy")
>       let b = np^.array^([6, 7, 8])
>       let y =  np^.arange^(24)^.reshape^(2, 3, 4)
>       
>       let a = np^.ones^(3, dtype: np^.int32)
>       let b = np^.linspace^(0, pi, 3)
>       let c = a+^b
>       let d = np^.exp^(c)

You could require `throws` on `subscript(dynamicMember:)` APIs.

"Throwing Properties and Subscripts proposal by brentdax"
<https://github.com/apple/swift-evolution/pull/218>

        let np = Python.import("numpy")
        let x = try! np.array([6, 7, 8])
        let y = try! np.arange(24).reshape(2, 3, 4)
        
        let a = try! np.ones(3, dtype: np.int32)
        let b = try! np.linspace(0, pi, 3)
        let c = try! a+b
        let d = try! np.exp(c)

If you allow dynamic member lookup on stdlib types:

        Double.pi.significant
                 ^
        ERROR: subscript can throw, but it is not marked with 'try'
        NOTE: did you mean 'significand'?

An implementation could fail by throwing an error or returning `nil`.
For example, JSValue/JSON member lookup could allow optional chaining.
But trying to invoke a non-callable JSValue could throw a TypeError.

-- Ben

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to