小さなフレームワークを改善したいので、への2つの呼び出しを削除したいと思いますeval
。
コードに話させてください:
# irf.coffee (The Framework)
# Classes which are appended to the namespace 'IRF'
classes = [
"Background"
"BoundingBox"
# ...
]
# Namespace where to attach classes
@IRF = {}
# TODO: Get rid of eval(c)
for c in classes
@IRF[c] = eval(c)
IRF
のようなクラス/オブジェクトにアクセスできるように、グローバル名前空間を「汚染」するだけですnew IRF.Background()
。
このフレームワークの目標は、このフレームワークを含む他のプロジェクトで使用されることです。だから私はこのようなプロジェクトを持っているかもしれません:
class TowerMap extends IRF.Game
constructor: (width, height) ->
@background = new IRF.Background(width, height)
ご覧のとおり、IRF
ここでは名前空間を使用する必要がありますが、この特定のプロジェクトでは、次のように名前空間なしで使用したいと思います。
# Require all Class of IRF, so we won't need namespace here
# TODO: get rid of eval
eval("var #{k} = v") for k,v of IRF
class TowerMap extends Game
constructor: (width, height) ->
@background = new Background(width, height)
すべてが期待どおりに機能しますが、どういうわけか、これら2つはeval
私を邪魔します。別の解決策があるでしょうか?