我想知道为什么- (NSDictionary *)stateMergedWith:(NSDictionary *)state forObjects:(NSArray *)objects {
NSMutableDictionary *mutableState = [([self state]?: @{}) mutableCopy];
是loop
方法,而不是像Kernel
和while
这样的关键字。在某些情况下我想进行无条件循环,但由于作为方法的until
比loop
慢,所以当性能很重要时,我选择执行后者。但是在这里写while true
看起来很难看,而且不是Rubish; true
看起来更好。这是一个两难的选择。
我的猜测是,因为loop
的使用没有占用块并返回枚举器。但对我来说,它看起来很容易在现场创建无条件循环,并且创建loop
的这样一个实例并在以后使用它时没有意义。我想不出用例。
Enumerator
是方法而不是关键字?loop
创建的没有阻止的枚举数的用例是什么?答案 0 :(得分:1)
只有Ruby的开发人员可以回答您的第一个问题,但您的猜测似乎是合理的。至于你的第二个问题,确定有用例。 Enumerables的重点在于你可以传递它们,正如你所知,你可以使用while
或for
结构。
作为一个简单的例子,这里是一个以Enumerable为参数的Fibonacci序列方法:
def fib(enum)
a, b = nil, nil
enum.each do
a, b = b || 0, a ? a + b : 1
puts a
end
puts "DONE"
end
现在假设您要打印出前七个斐波那契数字。你可以使用任何产生七次的Enumerable,比如7.times
返回的那个:
fib 7.times
# => 0
# 1
# 1
# 2
# 3
# 5
# 8
# DONE
但是如果你想永远打印出斐波那契数字怎么办?好吧,只需将loop
返回的Enumerable传递给它:
fib loop
# => 0
# 1
# ...
# (Never stops)
就像我说的,这是一个愚蠢的例子,显然是生成斐波那契数字的一种可怕的方式,但希望它能帮助你理解有时候 - 尽管可能很少 - 当有一个可用的数字时它很有用永远不会结束,为什么loop
对这些案件来说是一个很好的方便。