在java中,一些标准库方法(也许它们实际上不是方法?)具有以下格式:
keyword(condition or statements) {
//write your code here
}
这包括if语句,for-loop,while-loop do-while-loop等。
for(initialValue = n; conditionForLoopToContinue; incrementOrDecrement) {
//write your code
}
你也可以像这样开始匿名线程:
new Thread() {
//write your code here
}.start();
我想知道的是我们可以创建我们自己的方法(或者实际上被称为它们的任何方法)吗?
所以,例如,我会写一个'until'方法,如下所示:
int a = 0;
until(a == 10) {
a++;
}
其中(a == 10)等于while(a!= 10)。
当然,上面的例子不允许我们做任何新的事情(我们可以只使用while循环),但这个问题的目的是找出我们是否可以编写'自定义大括号方法'。
此外,如果你们知道任何具有此功能或类似功能的语言,请告知我们。
提前感谢您的帮助!
答案 0 :(得分:2)
您无法实施自己的关键字。您当然可以创建自己类的匿名子类,即可以
new YourOwnClass() {
// write your code here
}.launch();
如果你愿意的话。
使用Java 8,您可以进一步了解您要求的大括号语法。这是我尝试使用lambdas模仿你的util
方法:
public class Scratch {
static int a;
public static void until(Supplier<Boolean> condition, Runnable code) {
while (!condition.get())
code.run();
}
public static void main(String[] args) {
a = 0;
until(() -> a == 10, () -> {
System.out.println(a);
a++;
});
}
}
<强>输出:强>
0
1
2
3
4
5
6
7
8
9
请注意,在这个略显人为的例子中存在一些限制。例如a
由于闭包而需要是字段或常量变量。
答案 1 :(得分:0)
你正在做的事情是扩展语言,即发明一个新的&#34;保留词&#34;并且说这个保留字必须后跟一个布尔表达式和一个语句(块)。
仅需要新保留字的事实可能会导致很多问题,例如:人们可能已经在今天使用了until
这个词。一个变量。您的新功能会破坏该代码。
此外,您还需要告诉运行时环境新语句的效果是什么。
我不知道您可以简单地执行此操作的语言。就像@aioobe所说的那样,lambdas可能会变得非常接近。
答案 2 :(得分:0)
不像aioobe那样优雅:
abstract class until<T> {
// An attempt at an `until` construct.
// The value.
final T value;
// The test.
final Function<T, Boolean> test;
public until(T v, Function<T, Boolean> test) {
this.value = v;
this.test = test;
}
public void loop() {
while (!test.apply(value)) {
step();
}
}
abstract void step();
}
public void test() {
AtomicInteger a = new AtomicInteger();
new until<AtomicInteger>(a, x -> x.get() == 10) {
@Override
void step() {
a.getAndIncrement();
}
}.loop();
System.out.println("a=" + a);
}
可能会有一些改进。
就其他语言而言。
在C
中 - 如果我没记错的话 - 你可以这样做:
#define until(e) while(!(e))
并在BCPL中有一整套条件WHILE
,UNTIL
,IF
和UNLESS
等。