Ich dachte darüber nach, wie ich die Ausbeute von Python in Java und JavaScript ausdrücken kann.
Dieses Mal habe ich nicht versucht, etwas Praktisches zu machen, aber ich habe darüber nachgedacht, wie ich es ersetzen kann, wenn ich einen Codegenerator machen möchte.
Vorerst habe ich versucht, dies als Thema zu verwenden.
http://ideone.com/PG6xOJ
# your code goes here
def Generator(n):
yield 1;
idx = 0
while idx < n:
yield 2
idx += 1
yield 3
g = Generator(5)
for x in g:
print x
Ein wenig Gedankenpolitik
Ich habe es mit dieser Richtlinie in JavaScript geschrieben.
http://ideone.com/24L64n
// your code goes here
function Generator(n) {
var ctx = { state:0, idx:0 };
return function() {
while (1) {
switch (ctx.state) {
case 0:
ctx.state = 1;
return 1;
case 1:
if (ctx.idx < n) {
ctx.idx++;
return 2;
}
ctx.state = 2;
break;
case 2:
ctx.state = -1;
return 3;
default:
return undefined;
}
}
};
}
(function() {
var g = Generator(5);
while (1) {
var x = g();
if (x === undefined)
break;
print(x);
}
})();
Ich habe es auch in Java geschrieben.
http://ideone.com/YnxHkv
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
private static class Generator {
final int n_;
int state_ = 0, idx_ = 0;
boolean completed_ = false;
Generator(int n) {
n_ = n;
}
int generate() {
while (true) switch (state_) {
case 0:
state_ = 1; return 1;
case 1:
if (idx_ < n_) {
idx_++;
return 2;
}
else {
state_ = 2;
}
break;
case 2:
completed_ = true;
return 3;
}
}
boolean isCompleted() { return completed_; }
}
public static void main (String[] args) throws java.lang.Exception
{
Generator g = new Generator(5);
while (! g.isCompleted()) {
int x = g.generate();
System.out.println(x + "");
}
}
}
Beide bewegen sich vorerst.
Gibt es schon so einen Codegenerator?
In einer Zeit, in der Yield-Anweisungen normalerweise in Browsern verwendet werden können, müssen Sie nicht darüber nachdenken.
Recommended Posts