有替代eval延迟评价吗?

2视图(30天)
我试图做一个输入参数解析函数使用有很多可选的输入参数的函数。我接受这些结构或标签/值对(通过变长度输入宗量),我把它连同一个变量包含验证匿名函数为每个参数(例如@isnumeric)和另一个默认值:
函数ParseVarargin(变长度输入宗量、验证默认值)
这个函数通过用户提供的参数,验证每一个如果一个论点是不提供的,它使用默认值。这是完成assignin(调用者,)。现在的问题是,一些违约可能依赖于其他表达式输入参数(当然前处理)。我发现这样做正确的唯一方法就是使用evalin(调用者,),但这意味着我必须提供默认表达式ParseVarargin作为字符串。我真的不喜欢,虽然这个隐藏我的代码在一个字符串。我就喜欢而不是使一个匿名函数,只有得到评估当它被调用时,因此使用用户提供的值。我很确定没有替代,但想我问社区。
1评论
Stephen23
Stephen23 2017年9月20日
编辑:Stephen23 2017年9月24日
你的整个概念依赖于神奇地使变量出现和消失在不同的工作区:注意,这本身将复杂,更多缺陷,很难调试,慢得多比简单地传递变量作为输入/输出参数。
然后最重要的是你想做一些神奇的功能处理和评估他们在其他工作区与一些“延迟”…哎哟。它可能是值得考虑的一些影响,这将对你的代码(点了 eval 适用于 assignin ,增加的缺点,你是整天泡在多个工作区中):
你真的应该阅读这个帖子:

登录置评。

答案(1)

约翰D 'Errico
约翰D 'Errico 2017年9月20日
编辑:约翰D 'Errico 2017年9月20日
这绝对是疯了!为什么要使用assignin吗?返回参数作为一个结构体。
设置您的代码的结构参数。最初这些参数的值设置为默认值。所以这个结构体包含的每个字段默认值。
然后通过结构,加上所有属性/值对一个解析工具。如果看到一个属性,它检查的对应字段结构,覆盖默认值在这里举行。如果没有字段的名称,就创建一个。
然后向调用者返回相同的结构函数。
现在你所有的参数是包含在一个简单的结构。容易通过。易于使用。容易访问任何你可能需要的参数。
绝对没有理由使用assignin。当然,如果你喜欢车,低效的代码,在任何错误将纯地狱追踪,然后继续使用assignin。
3评论
1月
1月 2017年9月21日
我同意约翰和史蒂文。自动创建的 assignin 是一个在你的膝盖。你输入的自动解析可以减缓代码非常(因子2 - 20)并使它更难调试和维护。开发超级智能解析方法是无效的或有用的。我喜欢它只是愚蠢的,因为这允许集中的函数来计算。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!