我将lambda函数定义为
my_lambda = lambda { |x| 100 * x }
我将此函数作为另一个函数的输入传递,该函数需要验证其标识,如:
def function_verifier(func)
if func.to_s == "my_lambda"
return "ok"
else
return "mismatch!"
end
end
但是当我将my_lambda
作为输入传递给此函数时,命令func.to_s
将返回"#<Proc:0x0000a973516680@(pry):14 (lambda)>"
而不是"my_lambda"
。
如何将my_lambda
的函数句柄转换为字符串"my_lambda"
?
答案 0 :(得分:2)
这不会奏效,因为您将proc
传递给function_verifer
而proc
并不知道其值是多少的变量。您可以执行以下操作。
my_lambda = lambda { |x| 100 * x }
#=> #<Proc:0x000000008a1790@(irb):746 (lambda)>
MY_LAMBDA_OBJECT_ID = my_lambda.object_id
#=> 4525000
def function_verifier(func)
func.object_id == MY_LAMBDA_OBJECT_ID ? "ok" : "mismatch!"
end
function_verifier(my_lambda)
#=> "ok"
your_lambda = my_lambda
#=> #<Proc:0x000000008a1790@(irb):746 (lambda)>
your_lambda.object_id
#=> 4525000
function_verifier(your_lambda)
#=> "ok"
my_lambda = lambda { |x| 99 * x }
#=> #<Proc:0x000000009116d0@(irb):768 (lambda)>
my_lambda.object_id
#=> 4754280
function_verifier(my_lambda)
#=> "mismatch!"