当前位置: 首页 > 面试题库 >

我们可以快速测试符合相同协议的对象是否相同吗?

拓拔骁
2023-03-14
问题内容

我试图测试从工厂生成的两个对象是否相同,但是编译器似乎不允许对仅符合同一协议的对象进行身份检查。但是,将两个对象都转换为AnyObject似乎很好。无论如何,有必要避免似乎不必要的转换?

这是一个简单的示例,演示了我所看到的内容(快速1.2)

protocol FooBar {

}

class Foo: FooBar   {

}

class Bar {

  let foo1: FooBar?
  let foo2: FooBar?

  init() {
    foo1 = Foo()
    foo2 = Foo()
    if foo1! as? AnyObject === foo2! as? AnyObject {  // this is fine

    }

    if foo1! === foo2!  {  // Birnary operator '===' cannot be applied to two FooBar operands

    }
  }

}

问题答案:

身份运算符===只能应用于 引用 ,即 类的 实例。如果所有符合FooBar协议的类型都是类,则可以将其声明为“类协议”

protocol FooBar : class { }

然后

if foo1! === foo2! { ... }

编译并按预期工作,因为编译器“知道”两个操作数都是对类实例的引用。



 类似资料:
  • 两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"

  • 两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"

  • 问题内容: 在实践中我可以在多大程度上依赖对象及其唯一性?例如: 是否意味着反之亦然?那相反呢? 保存某个地方以后使用(例如,放入某个注册表而不是对象本身)有多安全? (作为针对Python规范的建议规范编写:是具有相同id()相同对象的对象,是is运算符,未绑定方法对象) 问题答案: 根据文档,只能保证an是唯一的 在特定对象的生命周期内,以及 在特定的解释器实例中 因此, 比较s是不安全的,除

  • 对于Mockito和其他测试框架,通常有方法在测试类中模拟方法的功能。我似乎无法让ScalaMock接受同样的方式。 在测试课上,我是: 我知道,如果你嘲笑/剔除类,然后在真实实例上调用相同的功能,这是行不通的。但是有一些变通方法,可以使用模拟调用等。 如果这是错误的方法,测试在同一个测试类中使用其他方法的方法的最佳方法是什么?我认为解耦方法是最好的实践。 谢谢

  • 我有一个testng测试方法和一个数据提供者。我想让测试用例对具有要测试的此功能的多个客户端可重用。唯一的问题是该功能在不同的客户端上的工作方式不同,即我必须为不同的客户端提供不同数量的相同功能的输入,并且最终结果对所有人来说都是相同的。 目前,我正在通过为具有此功能的多个客户端使用数据提供程序定义多个测试方法来执行此操作。 示例:- 我开发了一个通用的测试逻辑来处理不同的参数集。我无法做的是对不

  • "给定两个字符串s和t,编写一个函数来检查s是否包含t的所有字符(顺序与字符串t相同)。返回true或false。递归不一定。这是我用java写的代码片段。问题是输入: string1="st3h5irteuyarh!"和string2="shrey"它应该返回TRUE,但它返回FALSE。那是为什么?"