我正在ruby和method_missing实现中进行一些元编程我想知道如果我可以判断呼叫站点是否正在分配中使用?
例如:
x = special_function 'param'
将被method_missing实现捕获。我想知道我是否可以判断这个函数是否被调用:
special_function 'param'
即。没有左侧的任务。
在ruby中是否可以在代码中区分上述两个示例之间的区别?
答案 0 :(得分:4)
我不认为这是可能的,因为每个方法总是返回某些东西并且评估方法独立于调用它的上下文。
在这种情况下,赋值是偶然的,恰好可以使用方法返回的内容。
您是否有理由要区分这些来电?也许还有其他方法可以通过遵循方法中的命名约定来帮助您分离其用途来查看同一问题。
答案 1 :(得分:1)
据我所知,这与你的案件没有任何区别。
Ruby将从右到左调用您的代码。
所以它会先尝试执行:
special_function 'param'
然后它会将结果指向x
。
因此,如果未定义special_function
方法,则将其抛给method missing
,如果它将以某种方式处理它,它将返回一些vaue。 x
将被分配到此实际值
PS 我读@ ne0lithic_coder答案看起来我理解你的问题是错的。您可以看到此主题:Can Ruby return nothing?
<强> PPS 强>
如果您不想在某些情况下指定x
,可以尝试:
val = special_function 'param'
x = val unless val.nil? # if val