gpt4 book ai didi

objective-c - 查明函数参数是否是函数调用的一部分

转载 作者:太空狗 更新时间:2023-10-30 03:44:53 25 4
gpt4 key购买 nike

好吧,我认为这几乎是不可能的。但是尽管如此:是否有可能在方法调用内部知道该方法是否作为函数调用的一部分被调用?

示例(以及我的实际函数调用):

HDMExpressionSQLSelectBuilder *sb = [[[HDMExpressionSQLSelectBuilder alloc] init] autorelease];
[sb orNestedWhere:[sb where:@"wheraCoumnB" equals:@"whereBEqualValue"], [sb where:@"wheraCoumnB" equals:@"sth"], nil];

从这里开始有两件事发生了:

  • 参数以任何顺序计算(顺序不在 C 标准中指定,它在编译器和设置)
  • 尽管这对每个程序员来说都是显而易见的:内在之前评估函数

现在我想知道例如在这个方法调用中......

 [sb where:@"wheraCoumnB" equals:@"whereBEqualValue"]

.. 它作为函数参数的一部分被调用。

可能吗?黑魔法?

在你说我做错了之前,我应该修复我的代码:我声称我有一个罕见的情况,知道这样的事情是有意义的。我正在编写一个查询构建器,这将大大简化嵌套条件的使用。否则我将不得不做一些愚蠢的 nestedAndBegin 和后来的 nestedAndEnd 以实现括号,等等。在这种情况下会很尴尬,我的查询构建器是基于树的,我不想这样做(与字符串杂耍查询构建器不同,所有需要的是将逻辑表达式的节点放在适当的位置)。

更新

所以这毫无疑问是不可能的。对于那些对我如何解决我的特定问题感兴趣的人:我已经做到了所有对函数的调用都被推迟,所以对我的查询构建器的函数的调用将一个带有函数参数的方法调用对象放入调用列表.那时它不执行任何方法代码。每个调用对象都有一个 auto-inc 序列 Id,所以我知道函数何时被求值。现在在 nestedAnd 等函数(所以我的问题是关于那些函数)中,我检查存储的调用对象的序列 ID 是否对应于函数调用的参数索引。如果没有,现在是重新订购它们的正确时机。

然后语法检查和查询构建阶段被推迟到用户实际调用 query() 方法(或 ast() 以获取表达式树)。

最佳答案

不,没有(实用的)方法可以做到这一点。

从理论上讲,您可以在您的方法中添加一些代码,从您的二进制文件中读取调试符号,检查链接寄存器,然后使用该信息找出调用站点,从其他地方加载源代码,然后弄清楚映射,解析源代码并弄清楚它是按照您的描述被调用的。

关于objective-c - 查明函数参数是否是函数调用的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17555454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com