我正在尝试编写一个给出数字列表的函数,返回一个列表,其中每个第二个数字的值加倍,从最后一个元素开始.因此,如果列表元素是1..n,则第n个将保持原样,(n-1)-th将在值中加倍,(n-2)-th将被保留原样等
所以这就是我如何解决它:
MyFunc :: [Integer] -> [Integer]
MyFunc xs = reverse (MyFuncHelper (reverse xs))
MyFuncHelper :: [Integer] -> [Integer]
MyFuncHelper [] = []
MyFuncHelper (x:[]) = [x]
MyFuncHelper (x:y:zs) = [x,y*2] ++ MyFuncHelper zs
Run Code Online (Sandbox Code Playgroud)
它有效:
MyFunc [1,1,1,1] = [2,1,2,1]
MyFunc [1,1,1] = [1,2,1]
Run Code Online (Sandbox Code Playgroud)
但是,我不禁想到必须有一个更简单的解决方案,而不是反转列表,处理它然后再次反转它.我可以简单地向后迭代列表吗?如果有,怎么样?
访问子组件的计算属性的正确方法是什么?下面是我想要实现的目标的简化示例(也可在JSFiddle上找到):
const FoobarWidget = {
template: '<li>a: <input type="text" v-model="value.a" style="width:2em;"> b: <input type="text" v-model="value.b" style="width:2em;"> sum: {{this.sum}} <button @click="die">x</button></li>',
props: {
value: {
type: Object,
required: true,
}
},
computed: {
sum() {
const s = Number(this.value.a) + Number(this.value.b)
// WARNING eslint - vue:no-side-effects-in-computed-properties
this.value.sum = s;
return s;
}
},
methods: {
die() {
this.$emit('die');
}
}
};
new Vue({
el: '#app',
data: {
foobars: [{
a: '5',
b: '6'
}],
},
components: {
FoobarWidget,
}, …
Run Code Online (Sandbox Code Playgroud)而不是用户必须使用script.py --file c:/stuff/file.txt
有一种方法让用户可选地使用--file
?所以相反,它看起来像script.py c:/stuff/file.txt
但解析器仍然知道用户正在引用--file参数(因为它暗示).
在Clojure中,我有一张这样的地图:
(def data {:a 1 :b 2 :c 3})
Run Code Online (Sandbox Code Playgroud)
我想总结所有元素并得到6
结果.我知道我应该使用reduce
,但我不知道如何正确地做到这一点.