检查内插方法调用是否未定义
check if a interpolated method call is undefined
我有一个内插方法调用,send("#{k}_track", k, v)
。
我想 运行 检查是否定义了正在调用的方法。
类似 next if send("#{k}_track", k, v) == undefined
的内容。
正在调用的方法只是服务中的一个独立方法。
我试过使用 try
或 method_defined?
但运气不好。他们只是 return 相同的未定义方法错误。
所以我不确定这是否可能。
send("#{k}_track", k, v) if respond_to?("#{k}_track")
或者在接下来的情况下:
next unless respond_to?("#{k}_track")
send("#{k}_track", k, v)
您可能需要 respond_to?
instead of method_defined?
。这取决于您是检查实例还是检查 class 方法。例如,让我们看一下 String,它是 upcase
方法。
"foo".respond_to?("upcase")
=> true
这意味着您可以在 "foo"
上调用 upcase
,例如"foo".upcase
.
String.method_defined?("upcase")
=> true
这与通知您 String 实例响应 upcase
大致相同。
现在,让我们看看当我们尝试在一个实例上调用 method_defined?
时会发生什么:
"".method_defined?("upcase")
NoMethodError (undefined method `method_defined?' for "":String)
这是有道理的,因为 method_defined?
存在于 String 但 不存在 一个 String 实例。
如果没有更多的上下文很难说清楚,但总而言之,我想在你的情况下你可能想使用 respond_to?
而你看到的错误是调用 method_defined?
实例.
我有一个内插方法调用,send("#{k}_track", k, v)
。
我想 运行 检查是否定义了正在调用的方法。
类似 next if send("#{k}_track", k, v) == undefined
的内容。
正在调用的方法只是服务中的一个独立方法。
我试过使用 try
或 method_defined?
但运气不好。他们只是 return 相同的未定义方法错误。
所以我不确定这是否可能。
send("#{k}_track", k, v) if respond_to?("#{k}_track")
或者在接下来的情况下:
next unless respond_to?("#{k}_track")
send("#{k}_track", k, v)
您可能需要 respond_to?
instead of method_defined?
。这取决于您是检查实例还是检查 class 方法。例如,让我们看一下 String,它是 upcase
方法。
"foo".respond_to?("upcase")
=> true
这意味着您可以在 "foo"
上调用 upcase
,例如"foo".upcase
.
String.method_defined?("upcase")
=> true
这与通知您 String 实例响应 upcase
大致相同。
现在,让我们看看当我们尝试在一个实例上调用 method_defined?
时会发生什么:
"".method_defined?("upcase")
NoMethodError (undefined method `method_defined?' for "":String)
这是有道理的,因为 method_defined?
存在于 String 但 不存在 一个 String 实例。
如果没有更多的上下文很难说清楚,但总而言之,我想在你的情况下你可能想使用 respond_to?
而你看到的错误是调用 method_defined?
实例.