当我使用此函数创建数组时,出现以下错误:
class Example extends React.Component {
constructor(){
super();
this.state = {
items: [{id:1, name:'Hello'},{id:2, name:'World'},
{id:3, name:'React'},{id:4, name:'Example'}]
};
}
click(item){
alert(item)
}
render(){
const list = this.state.items.map((item,index) => {
return <li key={index} onClick={this.click.bind(this,item.name)}>{item.name}</li>
})
return <ul>
{list}
</ul>
}
}
React.render(<Example />, document.getElementById('container'));
列表的长度应该是一个非负整数,在这种情况下为3,那么为什么我会收到此错误,我该怎么做呢?
> (defun f1(lst)
(setf m (make-array '((length lst) 3))))
F1
> (f1 '(1 2 3))
Error: Not a nonnegative integer - (LENGTH LST)
答案 0 :(得分:4)
您引用了列表((length lst) 3)))
,因此其值为((LENGTH LST) 3)))
,其中第一个元素不是数字而是两个符号列表。
使用list
来构建一个新的列表,在该列表中评估第一个参数:
CL-USER> (defun f1(lst)
(setf m (make-array (list (length lst) 3))))
F1
CL-USER> (f1 '(1 2 3))
#2A((0 0 0) (0 0 0) (0 0 0))
在Lisp语言中,'((A) 3)
是(QUOTE ((A) 3))
的缩写,其被评估为((A) 3)
。另一方面,(list (A) 3)
会定期评估,评估(A)
对函数A
的调用,最后生成列表(value-of-calling-a 3)
。