这让我很困扰,经过大量搜索后,我在这里发布了帖子。
我想知道两个指向同一Proc的变量是否指向同一个Proc。 我相信一定是我没有理解到位的地方,例如为什么下面所有的语句都返回false?
class LambdaFunctions
def self.LambdaFunction1
lambda { |t| t ** 2}
end
end
a = LambdaFunctions.LambdaFunction1
b = LambdaFunctions.LambdaFunction1
puts LambdaFunctions.LambdaFunction1
puts a
puts b
puts a == b
puts a === b
puts a.eql?(b)
puts a.equal?(b)
puts a == LambdaFunctions.LambdaFunction1
puts a === LambdaFunctions.LambdaFunction1
puts a.eql?(LambdaFunctions.LambdaFunction1)
puts a.equal?(LambdaFunctions.LambdaFunction1)
感谢Mark,你让它变得更清晰了。 之前返回的是新对象,所以equal?函数永远不会返回true。这两个lambda函数在功能上是相同的,但不是同一个对象。 因此,如果您创建一个版本并在方法中将其返回,则可以测试其标识。 以下更有意义并按照我想要的方式工作。
class LambdaFunctions
@lambda1 = lambda { |t| t ** 2}
@lambda2 = lambda { |t| t ** 2}
def self.LambdaFunction1
@lambda1
end
def self.LambdaFunction2
@lambda2
end
end
func1 = LambdaFunctions.LambdaFunction1
func2 = LambdaFunctions.LambdaFunction1
func3 = LambdaFunctions.LambdaFunction2
puts func1.equal?(func2) # true
puts func1.equal?(func3) # false
puts func1.equal?(LambdaFunctions.LambdaFunction1) # true
puts func3.equal?(LambdaFunctions.LambdaFunction1) # false
puts func3.equal?(LambdaFunctions.LambdaFunction2) # true
def halts?(proc); proc == lambda { while true; end } end
。 - Jörg W Mittag