我想定义一个Perl函数(称之为"差异"),它取决于命令行参数.以下代码不起作用:
if ("square" eq $ARGV[0]) {sub difference {return ($_[0] - $_[1]) ** 2}}
elsif ("constant" eq $ARGV[0]) {sub difference {return 1}}
Run Code Online (Sandbox Code Playgroud)
似乎忽略了条件,因此无论$ ARGV [0]的值如何,"差异"函数都会得到第二个定义.
我可以通过在函数中添加一个条件来使代码工作:
sub difference {
if ("square" eq $ARGV[0]) {return ($_[0] - $_[1]) ** 2}
elsif ("constant" eq $ARGV[0]) {return 1}
}
Run Code Online (Sandbox Code Playgroud)
但这并不是我的意图 - 我不需要在执行期间每次评估条件.我只需要一种方法来影响函数的定义.
我的问题是:
我需要一个用户界面,允许用户根据多个列对表进行排序(例如按颜色排序,然后按颜色排序,或者选择价格,然后再按价格计算颜色).我熟悉的唯一这样的界面是在Excel> sort下的Excel中找到的对话框,但这是相当笨重的,并且不会让自己在视图之间快速切换.我更喜欢iTunes风格的界面,它允许通过点击列标题进行快速排序.然而,这样的界面通常只允许按一列排序(例外是iTunes本身具有非常有限的,明显硬编码的能力,按"艺术家专辑"和"年份专辑"排序,点击专辑标题).
我可以设想一个接口,其中每个列标题都有一些数字,这样单击1使列成为主要排序键,单击2辅助键,依此类推.或者,在列标题上单击(或右键单击)可以带有一个下拉菜单,其中包含"主要排序","次要排序"等.但是,我从未见过这样的界面实现,我没有对可能出现的可用性问题的良好直觉.
是否有应用程序允许使用列标题按多列排序?你能指点我吗?关于这样的接口是否有任何有用的可用性结果 - 哪个更好,哪个更少?
此外,虽然我最感兴趣的是接口的规范,但是可以理解传递给实现它的人的任何提示,例如提供解决方案部分的公共可用库(尤其是Java).
编辑:有两个人建议使用Excel风格的对话框.这不会起作用.对于我的应用程序,用户需要在现有表条目中找到"最佳匹配"(这通常不是完美匹配).该表太大而无法保留在您的脑海中,因此您需要继续扫描相关部分,重复对表进行排序以获取多个视图非常有用.每次更改视图时,必须通过一个包含多个选项的对话框才会太慢; 当你完成这个盒子的时候,你已经忘记了上一个视图的结果.