我有一个字典,它在其中存储一个列表,该列表中有一个对象类型,它有一些成员函数。
然后我有一个变量,我想要从0开始递增,它调用列表中的第一个位置,所以它看起来像这样:
index = 0
myDict = {
"test" : myList[index].foo
}
myDict["test"]()
index += 1
myDict["test"]()
我想要做的是它在列表中调用第二位。但是dict中的索引似乎是不可变的,因为它仍然指的是列表中的索引0
。
有没有办法让这项工作或我必须提出其他解决方案?
答案 0 :(得分:0)
您可以通过稍微更改代码来实现它。而不是从<head>
<script src="https://unpkg.com/vue@2.5.16/dist/vue.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.12.1/firebase.js"></script>
<script src="https://www.gstatic.com/firebasejs/4.11.0/firebase-firestore.js"></script>
</head>
<body>
<script>
var app = new Vue({
data() {
return {
name: ""
}
},
methods: {
firebase: function() {
var docRef = db.doc("test/testdoc");
docRef.get().then(function(doc) {
this.name = doc.data().name; //this one not working
console.log(doc.data().name); //just to test wether I can get data from Firestore
})
}
})
</script>
</body>
分配直接函数,而是分配一个将在其中执行myList[index].foo
函数的lambda。
你可以使用这样的lambda函数:
myList[index].foo
答案 1 :(得分:0)
实际上实际希望实现的目标并不清楚,但更通常的方法是将所需的行为封装在一个类中。
class Thing:
def __init__(self, handle):
self.inside = handle
self.index = 0
def update_index(self, newindex):
self.index = newindex
def value(self):
return self.inside[self.index].foo()
not_a_dict = Thing(mylist)
not_a_dict.value() # runs mylist[0].foo()
not_a_dict.update_index(1)
not_a_dict.value() # runs mylist[1].foo()
封装的细节显然取决于你。例如,你可以硬编码mylist
而不是让用户传入要封装的对象,和/或你可以使函数调用以获得可配置的值(传入lambda
回调函数初始化程序?)等。