Соответствие общей структуры Comparable - PullRequest
0 голосов
/ 27 августа 2018

Я строю некоторую логику для моделирования ранжирования рук в покере.Начал с протокола для определения покерной руки.

public protocol PokerHand: Comparable {
//Some definitions here
}

Затем я сделал 10 структур, по одной на руку, все соответствующие PokerHand, например:

///RoyalFlush is A, K, Q, J, 10, all the same suit.
public struct RoyalFlush: PokerHand {
//Properties and initializers here
}

extension PokerHandRanking: Comparable {
//Comparable logic
}

На этом этапе каждый тип, соответствующий PokerHand, может сравниваться с другим типом того же типа.

Теперь я хочу иметь возможность сравнить все из них, даже если они не принадлежат к одному и тому же типу.(Например, royalFlush > pair) Итак, я начал с этого:

struct PokerHandRanking<Hand: PokerHand> {

    let hand: Hand

    init(hand: Hand) {
        self.hand = hand
    }
}

И так как подтверждение Comparable - это то, что я хочу:

extension PokerHandRanking: Comparable {
    public static func < <T: PokerHand, S: PokerHand> (lhs: PokerHandRanking<T>, rhs: PokerHandRanking<S>) -> Bool {
        //some logic should be here
        return false
    }

    public static func == <T: PokerHand, S: PokerHand> (lhs: PokerHandRanking<T>, rhs: PokerHandRanking<S>) -> Bool {
        //some logic should be here
        return false
    }
}

Однако это не работает,при выполнении следующих действий:

let royalFlush = RoyalFlush(...)
let fourOfAKind = FourOfAKind(...)

XCTAssert(royalFlush == royalFlush) //works
XCTAssert(royalFlush == fourOfAKind) //Ambiguous reference to member '=='

Я получаю Ambiguous reference to member '==' при сравнении различных PokerHand соответствующих типов.

Чего мне не хватает?(Я использую swift 4.2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...