声明后修改 IEnumerator
Modifying an IEnumerator after declaration
我一直在使用 Unity C#。我不太了解 IEnumerators,但假设我有以下内容:
IEnumerator some_function(int a) { ... }
IEnumerator f = some_function(0);
有没有办法改变现有f
的参数值,使其等同于声明,例如:
IEnumerator f = some_function(5);
简短的回答是否。
显然你可以再次调用你的方法。或者您可以将您的行为打包到一个新的 class 或方法中。但是 IEnumerable<>
或使用的枚举器与允许这样做的生产者没有任何联系。
如果您还没有开始枚举函数的结果,只需再次调用您的函数就完全没有问题:
IEnumerable f = some_function(0);
f = some_function(5);
如果您已经开始枚举您的函数的结果,并且您希望现有的调用继续使用新值,那么考虑一个助手class :
class SomeFunctionData {
public int a;
}
IEnumerable some_function(SomeFunctionData data);
然后
var data = new SomeFunctionData { a = 0 };
IEnumerable f = some_function(data);
...
data.a = 5;
如果 some_function
继续查看现有的 SomeFunctionData
实例,从那时起,它将看到 a
的新值。请注意,在大多数情况下,这会导致难以理解的程序逻辑,因此在实现之前检查您是否真的需要它,但在某些情况下它很有用。
我一直在使用 Unity C#。我不太了解 IEnumerators,但假设我有以下内容:
IEnumerator some_function(int a) { ... }
IEnumerator f = some_function(0);
有没有办法改变现有f
的参数值,使其等同于声明,例如:
IEnumerator f = some_function(5);
简短的回答是否。
显然你可以再次调用你的方法。或者您可以将您的行为打包到一个新的 class 或方法中。但是 IEnumerable<>
或使用的枚举器与允许这样做的生产者没有任何联系。
如果您还没有开始枚举函数的结果,只需再次调用您的函数就完全没有问题:
IEnumerable f = some_function(0);
f = some_function(5);
如果您已经开始枚举您的函数的结果,并且您希望现有的调用继续使用新值,那么考虑一个助手class :
class SomeFunctionData {
public int a;
}
IEnumerable some_function(SomeFunctionData data);
然后
var data = new SomeFunctionData { a = 0 };
IEnumerable f = some_function(data);
...
data.a = 5;
如果 some_function
继续查看现有的 SomeFunctionData
实例,从那时起,它将看到 a
的新值。请注意,在大多数情况下,这会导致难以理解的程序逻辑,因此在实现之前检查您是否真的需要它,但在某些情况下它很有用。