为什么我不能从伪构建器 (AddMethod) 中修改构造环境?
Why can't I modify a construction environment from within a pseudo builder (AddMethod)?
我需要在多个构建环境中修改一组变量,因此我决定最简洁的方法是创建一个方法来执行此操作。
我尝试在构造环境对象中使用 AddMethod
而不是香草 python 函数,因为它似乎是在 scons
.
中执行此类操作的方式
不过,貌似构建环境的方法无法修改这个环境。
这是一个示例,我在其中测试了几种在构建环境中更改变量的方法:
env1 = Environment(VAR='foo')
def changeVal(env, newval):
env['VAL'] = newval
env1.AddMethod(changeVal, 'ChangeVal')
env2 = env1.Clone(VAR='bar')
env3 = env2.Clone()
env3['VAR'] = 'baz'
env4 = env3.Clone()
env4.ChangeVal('qux')
print(env1['VAR'], env2['VAR'], env3['VAR'], env4['VAR'])
结果是 foo bar baz baz
,而我期望的是 foo bar baz qux
。
这是为什么?
很确定您的示例中有错字:
env1 = Environment(VAR='foo')
def changeVal(env, newval):
env['VAL'] = newval
env1.AddMethod(changeVal, 'ChangeVal')
env2 = env1.Clone(VAR='bar')
env3 = env2.Clone()
env3['VAR'] = 'baz'
env4 = env3.Clone()
env4.ChangeVal('qux')
print(env1['VAR'], env2['VAR'], env3['VAR'], env4['VAR'])
具体
def changeVal(env, newval):
env['VAR'] = newval
#. ^^^--- You have VAL here, but check for VAR later.
我需要在多个构建环境中修改一组变量,因此我决定最简洁的方法是创建一个方法来执行此操作。
我尝试在构造环境对象中使用 AddMethod
而不是香草 python 函数,因为它似乎是在 scons
.
不过,貌似构建环境的方法无法修改这个环境。
这是一个示例,我在其中测试了几种在构建环境中更改变量的方法:
env1 = Environment(VAR='foo')
def changeVal(env, newval):
env['VAL'] = newval
env1.AddMethod(changeVal, 'ChangeVal')
env2 = env1.Clone(VAR='bar')
env3 = env2.Clone()
env3['VAR'] = 'baz'
env4 = env3.Clone()
env4.ChangeVal('qux')
print(env1['VAR'], env2['VAR'], env3['VAR'], env4['VAR'])
结果是 foo bar baz baz
,而我期望的是 foo bar baz qux
。
这是为什么?
很确定您的示例中有错字:
env1 = Environment(VAR='foo')
def changeVal(env, newval):
env['VAL'] = newval
env1.AddMethod(changeVal, 'ChangeVal')
env2 = env1.Clone(VAR='bar')
env3 = env2.Clone()
env3['VAR'] = 'baz'
env4 = env3.Clone()
env4.ChangeVal('qux')
print(env1['VAR'], env2['VAR'], env3['VAR'], env4['VAR'])
具体
def changeVal(env, newval):
env['VAR'] = newval
#. ^^^--- You have VAL here, but check for VAR later.