什么是 Cats 模拟中的@noop

what is @noop in simulacrum in Cats

什么是猫的@noop 注释。基本上,它不接受任何像@op 这样的字符串别名。这是它的 Scala 文档

/**
 * Annotation that may be applied to methods on a type that is annotated with `@typeclass`.
 *
 * Doing so results in the method being excluded from the generated syntax ops type.
 */
class noop() extends StaticAnnotation

我对这份文档感到困惑。有人可以向我解释并举例说明如何使用它吗?

非常感谢

所以假设你有这个类型类:

@typeclass trait Foo[A] {
     def bar(x: A)(y: A): A
}

然后您将能够(通过 simulacrum 定义的隐式语法)编写此方法:

def baz[A: Foo](x: A, y: A): A = x bar y

如果你改为用 @noop 注释 bar 方法,上面的代码不会编译成 "bar is not a member of type A",因为不会提供隐式转换A 到有 bar 方法的东西。