隐含输出:IDL 8.3 中的新命令行特性
21559 评价本文:
5.0
隐含输出:IDL 8.3 中的新命令行特性
匿名 2014年2月6日,星期四
与我们的客户一样,Exelis(注:原Harris Geospatial,现为NV5 Geospatial)的员工在工作中也会使用合适的工具。当IDL及其Workbench尚未具备某些能使我们开发工作最高效、最具成本效益的功能时,我们会使用其他工具。这种情况并不常见,但确实存在。
我们的专业服务团队尤其擅长在这种混合模式环境中开展工作。
有时,我们和我们的客户会在其他环境中遇到一些提升效率的功能,这让我们不禁自问:"如果IDL也能实现这个功能,那岂不是太棒了?" 有时,如果商业需求能够支持,这个问题就不再是反问,而会得到一个响亮的"是的!"
IDL命令行上的"隐含输出"行为正是这样一个在版本8.3中首次出现的新特性。它吸收并扩展了我们所见过的优秀想法。这也是我们的客户频繁请求的功能之一。
就像大气中的氧气一样,一旦你开始使用它,你就会奇怪以前没有它的时候是怎么工作的。绝非戏言。
还记得这个老掉牙的例子吗?
IDL> PRINT, 2 + 2
4
好了,忘掉你学过的关于使用 PRINT 的一切吧。请看隐含输出:
IDL> 2+2
4
毫不夸张地说,这就像一道闪电瞬间过载了你所有的神经元,不是吗?想想那些年你为输入"PRINT"(或者更糟的是输成"PRITN",或是忘记了必需的逗号)所累积花费的精力。以后再也不用了。
再次声明,绝不过分渲染,但PRINT的"霸权"已被扫进了历史的垃圾堆。
以下是其他例子:
IDL> a = BINDGEN(5)
IDL> a
0 1 2 3 4
IDL> a[2:4]
2 3 4
IDL> SIN(a)
0.00000000 0.84147096 0.90929741 0.14112000 -0.75680250
但是,等等,还有更多!隐含输出将自动为浮点型和双精度数据显示最大精度的数字位数。以下是默认PRINT行为(为保持向后兼容性,其行为不会改变)与新的隐含输出行为之间的一些比较:
IDL> print, 1.2345678
1.23457
IDL> 1.2345678
1.2345678
IDL> print, !dpi
3.1415927
IDL> !dpi
3.1415926535897931
对于字符串数组、LIST、HASH以及结构体,也都有新的行为。
如果您使用 IDL_Object 超类编写面向对象的代码,重写新的 _overloadImpliedPrint 方法将使您能够自动将此功能扩展到您自己的类,类似于 _overloadPrint 方法。您可以选择让一个方法简单地调用另一个,或者区分它们的行为。事情变得越来越好了,不是吗?
这一切在命令行上都很好,但是如果您希望在执行中的应用程序或实用程序中也使用这种新的输出风格呢?FIX、PRINT 和 STRING 函数现在都接受一个新的IMPLIED_PRINT关键字,该关键字将使用与隐含输出相同的规则进行输出。
是的,这是一场革命,您也可以鱼与熊掌兼得。