我将给出一些C风格的"括号"伪代码来显示我想以另一种方式表达的内容:
for (int i = 0; i < n; i++) {
if (i == 3 || i == 5 || i == 982) {
assertTrue( isCromulent(i) );
} else {
assertFalse( isCromulent(i) );
}
}
Run Code Online (Sandbox Code Playgroud)
该用于循环不是很重要的,那不是我的问题的观点:我想知道我怎么可以重写什么是使用Scala的内循环.
我的目标不是让最短的代码成为可能:这是因为我想了解在Scala中可以对方法名称(?)进行何种操作.
你可以在Scala中执行类似下面的操作(以下仍然是某种伪代码,而不是Scala代码):
assert((i==3 || i==5 || i==982)?True:False)(isCromulent(i))
Run Code Online (Sandbox Code Playgroud)
甚至是这样的:
assertTrue( ((i==3 || i==5 || i==982) ? : ! ) isCromulent(i) )
Run Code Online (Sandbox Code Playgroud)
基本上我想知道测试的结果(i == 3 || i == 5 || i == 982)是否可用于在两个方法之间分派或在表达式之前添加"not".
我不知道它是否有意义所以请善待(看看我的个人资料):)
Ale*_*nov 10
虽然在这种情况下,pelotom的解决方案要好得多,但您也可以这样做(这比您最初提出的要求更接近):
(if (i==3||i==5||i==982) assertTrue else assertFalse)(isCromulent(i))
Run Code Online (Sandbox Code Playgroud)
动态构造名称可以通过反射来完成,但这肯定不简洁.
在Scala类型系统中,无法根据条件动态创建方法名称.
但在这种情况下根本不需要.
val condition = i == 3 || i == 5 || i == 982
assertEquals(condition, isCromulent(i))
Run Code Online (Sandbox Code Playgroud)