Это сводит меня с ума, я публикую здесь после долгих осмотров.
Я хотел бы знать, если две переменные, указывающие на один и тот же 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)
Спасибо, Марк, вы сделали это намного яснее.В предыдущем он возвращал новые объекты каждый раз, так что равно?функция никогда не собиралась возвращать истину.Две лямбды были функционально одинаковыми, но не одним и тем же объектом.Поэтому, если вы создадите одну версию, а затем вернете ее обратно в метод, вы сможете проверить ее идентичность.Следующее имеет больше смысла и работает так, как я намеревался.
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