2016-10-22 11 views
0

これが可能かどうかを知りたいだけです。私はWeb開発者として4年間Javascriptを使用してきました。だから私は自分のコードで匿名関数を使うのによく慣れています。 Processingを試してみると、私はJavascriptで普通にやることのすべてをどのように行うことができるのか見たいと思っています。 JavaScriptでJava処理、匿名関数を使用

、私はそうのような関数を使用します。

fn.call(instance,arg1, arg2); 

または

fn.apply(instance,args); 

...しかし、私は、処理中にそのようなことを行うことができませんよ。

私は「無名関数」を呼び出すと、インスタンスの名前空間に関数を実行しようとしています:

public void resetHealth(){ 
    this.health = 10; 
} 

class Player{ 
    public int health; 
    Player(){ 
     super(); 
     this.health = 10; 
    } 
} 

Player p = new Player(); 

//where it gets prickly: 

resetHealth.invoke(p); 

期待される結果:私は私は何かどうかを知りたいprint p.health; //returns 0

Javaのやり方は間違っています。しかし、それは処理と関係しているかもしれません。長期的には

+1

なぜresetHealthはPlayerクラス外の関数ですか? 'this'はそのメソッドで文脈や意味を持ちません。 –

+0

その理由は、クラスの中に関数を置くのではなく、関数を共有して渡すことができるからです。それを行う方法はありますか? –

+0

Java 8 [メソッド参照](https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html)を参照してください。しかし、単純に[interfaces](https://docs.oracle.com/javase/tutorial/java/concepts/interface.html)を定義し、代わりにそのインタフェースを実装するオブジェクトを渡すことをお勧めします。 「オブジェクトをオブジェクト内に配置する」は良いです:) – paulsm4

答えて

0

は、私が(例えばp.resetHealth()

class Player { 
    public int health; 
    Player() { 
    super(); 
    this.health = 10; 
    } 
    public void resetHealth() { 
    this.health = 10; 
    } 
} 

void setup() { 
    Player p = new Player(); 

    //test, set lower health 
    p.health = 3; 
    println("lowed health to", p.health); 

    //test, call reset health 
    p.resetHealth(); 
    println("reset health to", p.health); 
} 

ます場合は、ドット表記を、その後、プレイヤークラス内 をごresetHealth()関数を移動使用してそれを呼び出す必要がありDaniel Shiffman's OOP Tutorial

をチェックアウトをお勧めします既にJavaScriptの場合は、p5.jsを使って自宅で感じるはずですが、処理の大半はまだ使用しています。

+0

すばやい応答をいただきありがとうございました。 Javaでは、小さくて簡潔なコードは必要ありません。私はクラス継承をうまく利用します.Javascriptでもやっています。 –

+0

Javaはコンパイルされた言語なので、厳密な型キャスト、クラス構造などのように、JavaScriptが解釈されるように多くのことが厳しくなっているので、動的な型に関するもう少し柔軟性があります。あなたがJavaに行きたい場合は、OOPと継承を忘れて、Javaを使って最初からやり直すようなふりをするのです。これは、言語間にかなりの違いがあるため、より簡単で混乱を避けることができます。あなたのJSの知識を大切にしたいなら、p5.jsを使うことをお勧めします。 –