gpt4 book ai didi

metaprogramming - CoffeeScript动态方法

转载 作者:行者123 更新时间:2023-12-04 13:43:37 24 4
gpt4 key购买 nike

我正在尝试在coffee脚本中动态创建方法,但是如我的代码所示,用于创建方法的迭代器不会在两次迭代之间重置其变量,因此我遇到了冲突的共享变量:

class MyClass
constructor: (@name) ->

for k, v of ['get', 'set']
console.log('creating method: ' + v)
MyClass::[v] = (args...) ->
method = v
console.log('executing method: ' + method)

o = new MyClass('dummy')
o.get()
o.set()

输出:
> creating method: get
> creating method: set
> executing method: set
> executing method: set

有人知道我做错了吗?

最佳答案

您的内部功能:

(args...) ->
method = v
console.log('executing method: ' + method)

实际上是 v的闭包,因此当执行时, v会求值为循环中的最后一个值(即 set)。看起来您只需要关闭一下即可:
build_method = (v) ->
(args...) ->
method = v
console.log('executing method: ' + method)

然后:
for k, v of ['get', 'set']
console.log('creating method: ' + v)
MyClass::[v] = build_method(v)

请记住,CoffeeScript只是具有不同构成的JavaScript,因此它会遇到很多相同的问题(与任何带有闭包的语言一样),并且这些问题具有相同的解决方案。

关于metaprogramming - CoffeeScript动态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6508667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com