使通用结构符合可比性

时间:2018-08-26 23:56:06

标签: swift

我正在建立一些模型来模拟扑克的手部排名。 从定义扑克手的协议开始。

$lookup = array_flip(file('small.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES));
if($file = fopen('big.txt', 'r')){
    while(!feof($file)){
        $line = rtrim(fgets($file));
        if (isset($lookup[$line])) {
            echo "$lines : exists.\n";
        }
    }
    fclose($file);
}

然后,我制作了10个结构,每手一个,都符合public protocol PokerHand: Comparable { //Some definitions here } ,例如:

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 '=='

我想念什么? (我使用的是Swift 4.2)

0 个答案:

没有答案