beTheSameInstanceAs(CardSuit.HEART)
возвращает Matcher<CardSuit>
, поэтому оно не может совпадать с произвольным ICardSuit
. Это имеет смысл (хотя Matcher
может быть против -варианта, здесь вам понадобится ковариация). Но вы можете:
Звонить явно beTheSameInstanceAs<ICardSuit>(CardSuit.HEART)
.
Создайте вспомогательную функцию
inline fun <T1, reified T2 : T1> Matcher<T2>.widen() = object : Matcher<T1>() {
override fun test(value: T1) =
if (value is T2)
this.test(value)
else
Result(false, "$value is not a ${T2::class.name}", "$value is a ${T2::class.name}")
}
и вызовите
it should beTheSameInstanceAs(CardSuit.HEART).widen()
(я думаю, здесь должен работать вывод типов).
Поскольку beTheSameInstanceAs(x)
действительно может соответствовать чему угодно, объявите эквивалентную функцию, которая возвращает Matcher<Any>
:
fun beTheSameInstanceAsAny(x: Any) = beTheSameInstanceAs(x)
// usage
"HEART" -> it should beTheSameInstanceAsAny(CardSuit.HEART)
Краткий ответ: да.
Вещи, о которых следует позаботиться при программировании, -
Кроме того, если вы создали приложение GTK # в системе * nx, вы сможете запустить его на Windows, если вы установили сборку GTK #, и наоборот.
Я сделал это сам, и все заработало, как и ожидалось. У меня была проблема, чтобы найти конкретную версию GTK # для сборки на Windows, и это заняло у меня несколько часов.
В общем, вы, вероятно, просто использовали бы .Net runtime в Windows. Установщик GTK # для .Net доступен на странице загрузки Mono . Вашим пользователям нужно будет установить это, а затем запустить ваше приложение, используя обычную среду выполнения .Net.