如何检查传递的参数是否是mixin

how to check if a passed arguement is a mixin

我有一个 mixin 需要另一个 mixin(如果你愿意的话回调) 如何检查传递的参数是否是一个 mixin,这样它就不会破坏我的代码??

我试过了

p #{mixins}  //- nothing gets outputed
p #{Object.keys(pug_mixins).length}  //- 0
p #{JSON.stringify(pug_mixins)}   // {}
p #{globals}  //- nothing gets outputed
// but in vain

有趣的是我在调用 mixin 时故意输入错误
记录的错误以 pug_mixins.templatee is not a function ¯\_(ツ)_/¯

开头

编辑:我也尝试浏览源代码和文档,但没有任何帮助

edit2: 好像只有包裹在函数中才有效!这是为什么???

不起作用

mixin myMixin()
    em smth

#container
    if pug_mixins['myMixin']
        h2 200
    else
        h2 404
//- 404
//- WHY????


有效

mixin myMixin
    h2 200:)!

-
    const typeCheck = val => {
        if (pug_mixins[val]) {
            return 'mixin'
        } else {
            return 'text'
        }
    }

mixin myMixin2(val)
    #container
        case typeCheck(val)
            when 'mixin'
                +#{val}()
            when 'text'
                p 404:')
            default
                p i hate my life

+myMixin2('myMixin')

这对我有用:

mixin bar(m)
  | before_
  if pug_mixins[m]
    +#{m}
  | _after

mixin foo
  b foo

+bar("foo")
= " "
+bar("baz")

给出此输出:before_<b>foo</b>_after before__after

请注意,pug_mixins 对代码的顺序很敏感。

编辑添加:

您还必须在某个时候实际调用 mixin 才能使 mixin 名称出现在 pug_mixins 中。请注意,在您的无效示例中,您检查了混音的存在,但实际上并未调用它。