有替代eval延迟评价吗?
2视图(30天)
显示旧的评论
我试图做一个输入参数解析函数使用有很多可选的输入参数的函数。我接受这些结构或标签/值对(通过变长度输入宗量),我把它连同一个变量包含验证匿名函数为每个参数(例如@isnumeric)和另一个默认值:
函数ParseVarargin(变长度输入宗量、验证默认值)
这个函数通过用户提供的参数,验证每一个如果一个论点是不提供的,它使用默认值。这是完成assignin(调用者,)。现在的问题是,一些违约可能依赖于其他表达式输入参数(当然前处理)。我发现这样做正确的唯一方法就是使用evalin(调用者,),但这意味着我必须提供默认表达式ParseVarargin作为字符串。我真的不喜欢,虽然这个隐藏我的代码在一个字符串。我就喜欢而不是使一个匿名函数,只有得到评估当它被调用时,因此使用用户提供的值。我很确定没有替代,但想我问社区。
答案(1)
约翰D 'Errico
2017年9月20日
编辑:约翰D 'Errico
2017年9月20日
这绝对是疯了!为什么要使用assignin吗?返回参数作为一个结构体。
设置您的代码的结构参数。最初这些参数的值设置为默认值。所以这个结构体包含的每个字段默认值。
然后通过结构,加上所有属性/值对一个解析工具。如果看到一个属性,它检查的对应字段结构,覆盖默认值在这里举行。如果没有字段的名称,就创建一个。
然后向调用者返回相同的结构函数。
现在你所有的参数是包含在一个简单的结构。容易通过。易于使用。容易访问任何你可能需要的参数。
绝对没有理由使用assignin。当然,如果你喜欢车,低效的代码,在任何错误将纯地狱追踪,然后继续使用assignin。
3评论
1月
2017年9月21日
我同意约翰和史蒂文。自动创建的
assignin
是一个在你的膝盖。你输入的自动解析可以减缓代码非常(因子2 - 20)并使它更难调试和维护。开发超级智能解析方法是无效的或有用的。我喜欢它只是愚蠢的,因为这允许集中的函数来计算。