Функция Python list () на (не) повторяемой

Вы можете сделать

object EmptyChildEventListener : ChildEventListener {
     override fun onCancelled(p0: DatabaseError) {}
     override fun onChildChanged(p0: DataSnapshot, p1: String?) {}
     override fun onChildMoved(p0: DataSnapshot, p1: String?) {}
     override fun onChildRemoved(p0: DataSnapshot) {}
     override fun onChildAdded(p0: DataSnapshot, p1: String?) { }
} 

ref.addChildEventListener(object : ChildEventListener by EmptyChildEventListener {
     override fun onChildAdded(p0: DataSnapshot, p1: String?) {
         subscriber.onNext(Value.parse(unitName, varName, p0))
     }
})

EDIT: но вы можете, возможно, улучшить это так, например

inline fun DatabaseReference.onChildAdded(crossinline added: (DataSnapshot, String?) -> Unit) {
    this.addChildEventListener(object : ChildEventListener by EmptyChildEventListener {
         override fun onChildAdded(p0: DataSnapshot, p1: String?) = added(p0, p1)
    })
})

Теперь вы можете сделать

ref.onChildAdded { p0, p1 -> 
    subscriber.onNext(Value.parse(unitName, varName, p0))
}
2
задан marthin23 18 January 2019 в 21:42
поделиться

1 ответ

Вы можете просто проверить списки и использовать .extend для объединения или .append для добавления элементов, не включенных в список:

class Foo:
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return f'Foo({self.value})'

def concat(*args):
    result = []
    for arg in args:
        if isinstance(arg,list):
            result.extend(arg)
        else:
            result.append(arg)
    return result

a = concat(Foo(1),Foo(2),Foo(3))
print(a)
b = concat(Foo(6),Foo(7))
print(b)
c = concat(a,Foo(4),Foo(5),b)
print(c)

Вывод:

[Foo(1), Foo(2), Foo(3)]
[Foo(6), Foo(7)]
[Foo(1), Foo(2), Foo(3), Foo(4), Foo(5), Foo(6), Foo(7)]
0
ответ дан Mark Tolonen 18 January 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: