Needs better error msg?


(Flamedoge) #1

b.sw:
func findIndex<T: Equatable>(array: [T], _ valueToFind: T) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

let foundAtIndex = findIndex([1, 2, 3, 4], 3)
print(foundAtIndex == 2) // true

···

===================
~/git/swift-source$
build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swift b.sw
b.sw:10:44: error: unnamed argument #2 must precede unnamed argument #1
let foundAtIndex = findIndex([1, 2, 3, 4], 3)
                             ~~~~~~~~~~~~ ^
                             3 [1, 2, 3, 4]

The error seems to arise from the requirement:

If a parameter has an argument label, the argument *must* be labeled when

you call the function.

Instead the shown error assumes the order is swapped because first argument
was unnamed. Should the former (from requirement) be shown as the error
here?

-Kevin


(Joe Groff) #2

Yeah, that would make much more sense. If you have a moment, would you be able to report this as a bug on bugs.swift.org?

-Joe

···

On Sep 20, 2016, at 1:45 PM, Kevin Choi via swift-dev <swift-dev@swift.org> wrote:

b.sw:
func findIndex<T: Equatable>(array: [T], _ valueToFind: T) -> Int? {
    for (index, value) in array.enumerated() {
        if value == valueToFind {
            return index
        }
    }
    return nil
}

let foundAtIndex = findIndex([1, 2, 3, 4], 3)
print(foundAtIndex == 2) // true

===================
~/git/swift-source$ build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swift b.sw
b.sw:10:44: error: unnamed argument #2 must precede unnamed argument #1
let foundAtIndex = findIndex([1, 2, 3, 4], 3)
                             ~~~~~~~~~~~~ ^
                             3 [1, 2, 3, 4]

The error seems to arise from the requirement:
> If a parameter has an argument label, the argument must be labeled when you call the function.

Instead the shown error assumes the order is swapped because first argument was unnamed. Should the former (from requirement) be shown as the error here?


(Mark Lacey) #3

b.sw:
func findIndex<T: Equatable>(array: [T], _ valueToFind: T) -> Int? {
   for (index, value) in array.enumerated() {
       if value == valueToFind {
           return index
       }
   }
   return nil
}

let foundAtIndex = findIndex([1, 2, 3, 4], 3)
print(foundAtIndex == 2) // true

===================
~/git/swift-source$ build/Ninja-RelWithDebInfoAssert/swift-linux-x86_64/bin/swift b.sw
b.sw:10:44: error: unnamed argument #2 must precede unnamed argument #1
let foundAtIndex = findIndex([1, 2, 3, 4], 3)
                            ~~~~~~~~~~~~ ^
                            3 [1, 2, 3, 4]

The error seems to arise from the requirement:

If a parameter has an argument label, the argument must be labeled when you call the function.

Instead the shown error assumes the order is swapped because first argument was unnamed. Should the former (from requirement) be shown as the error here?

Yeah, that would make much more sense. If you have a moment, would you be able to report this as a bug on bugs.swift.org <http://bugs.swift.org/>?

I believe we already have one: https://bugs.swift.org/browse/SR-2242.

Mark

···

On Sep 20, 2016, at 2:05 PM, Joe Groff via swift-dev <swift-dev@swift.org> wrote:

On Sep 20, 2016, at 1:45 PM, Kevin Choi via swift-dev <swift-dev@swift.org> wrote:

-Joe
_______________________________________________
swift-dev mailing list
swift-dev@swift.org <mailto:swift-dev@swift.org>
https://lists.swift.org/mailman/listinfo/swift-dev