Leaving the "should we do it at all" question aside…

> On Nov 10, 2017, at 9:37 AM, Chris Lattner via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> We propose introducing this protocol to the standard library:
> 
> protocol DynamicCallable {
>   associatedtype DynamicCallableArgument
>   associatedtype DynamicCallableResult
> 
>   func dynamicCall(arguments: [(String, DynamicCallableArgument)]) throws -> 
> DynamicCallableResult
> }
> 
> It also extends the language such that function call syntax - when applied to 
> a value of DynamicCallable type - is accepted and transformed into a call to 
> the dynamicCall member. The dynamicCall method takes a list of tuples: the 
> first element is the keyword label (or an empty string if absent) and the 
> second value is the formal parameter specified at the call site.

I don't really like passing the argument names to the parameter list. Instead, 
I would prefer to see them handled in the member-resolution method. You don't 
give a design for DynamicMemberLookupProtocol here, but assuming that you're 
imagining that a call like this:

        foreignObject.someValue(keyword1: 42, "foo", keyword2: 19)

Would translate to something like this:

        foreignObject.dynamicMethodLookup(name: 
"someValue").dynamicCall(arguments: [("keyword1", 42), ("", "foo"), 
("keyword2", 19)])

I would instead like it to look like this:

        foreignObject.dynamicMethodLookup(name: "someValue", arguments: 
["keyword1", "", "keyword2"]).dynamicCall(arguments: [42, "foo", 19])

This would better suit languages like Squeak (or Swift!) where you cannot fully 
look up a method without its keywords. (Languages like Python would simply 
store the keywords inside the object returned by `dynamicMethodLookup`.) It 
would also allow you to use our "get-a-closure" syntax:

        let uncalledMethod = foreignObject.someValue(keyword1:_:keyword2:)

-- 
Brent Royal-Gordon
Architechies

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

Reply via email to