Coffeescript 咖啡脚本';在';不像Python';s
咖啡脚本:Coffeescript 咖啡脚本';在';不像Python';s,coffeescript,Coffeescript,咖啡脚本: list = [[0, 0], [0, 1], [1, 0]] console.log [0, 0] in list #false console.log [1, 0] in list #false console.log [0, 1] in list #false console.log [1, 1] in list #false Python: >>> lst = [[0, 0], [0, 1], [1, 0]] >>
list = [[0, 0], [0, 1], [1, 0]]
console.log [0, 0] in list #false
console.log [1, 0] in list #false
console.log [0, 1] in list #false
console.log [1, 1] in list #false
Python:
>>> lst = [[0, 0], [0, 1], [1, 0]]
>>> [0, 0] in lst
True
>>> [1, 0] in lst
True
>>> [0, 1] in lst
True
>>> [1, 1] in lst
False
我如何让CoffeeScript复制Python的“in”来实现这一点?它确实按照您想要的方式工作,但它是通过引用实现的:
item1 = [0, 0]
item2 = [0, 1]
item3 = [1, 0]
item4 = [1, 1]
list = [item1, item2, item3]
console.log item1 in list # true
console.log item2 in list # true
console.log item3 in list # true
console.log item4 in list # false
要通过深度检查而不是引用使其工作,您必须使用coffee脚本编译器,将此功能添加到coffee脚本语言中,然后提交拉取请求,说服守门员这是一个好功能,并希望他们将其合并
list = [[0, 0], [0, 1], [1, 0]]
contains = (lst, compare) ->
ret = true for l in lst when l[0] is compare[0] and l[1] is compare[1]
return Boolean ret
console.log contains list, [0, 0] # true
console.log contains list, [1, 0] # true
console.log contains list, [0, 1] # true
console.log contains list, [1, 1] # false
Coffeescript将列表中的
item1转换为(忽略处理没有indexOf
的浏览器的补丁):
因此,它受到Javascript编码方式indexOf
的限制。
indexOf使用严格相等(与===或三重相等运算符使用的方法相同)将searchElement与数组的元素进行比较
这大致相当于Python列表搜索,它使用is
来比较item1
和list[i]
。比较这两条python语句
[[0,1] is l for l in alist]
[alist[1] is l for l in alist]
要编写与Python行为相同的Coffeescript(或Javascript),需要一种比较两个数组的方法。比较
[0,1]==[0,1]
所有3种语言。只有Python才是如此
下划线
实现深度比较:
isEqual(对象,其他)
在两个对象之间执行优化的深度比较,以确定它们是否应被视为相等
使用该函数,我可以定义一个函数,如果找到该项,则返回该项;如果没有,则返回未定义项
ud = require 'underscore'
myin = (list, item)->
ud.find(list,(x)->
ud.isEqual(item,x))
myin(list,[0,0])
# [ 0, 0 ]
myin(list,[0,3])
# undefined
myin(list,[0,1])?
# true
myin(list,[2,2])?
# false
我仔细检查了一下,不会那么容易的
ud = require 'underscore'
myin = (list, item)->
ud.find(list,(x)->
ud.isEqual(item,x))
myin(list,[0,0])
# [ 0, 0 ]
myin(list,[0,3])
# undefined
myin(list,[0,1])?
# true
myin(list,[2,2])?
# false