-1

私は R 言語の初心者なので、Java が R で OOP をサポートできることがわかったので、ClassA から ClassB メソッドを呼び出したいのと同じように、この要件を説明する必要があると思います。

ClassB.java

public class ClassB {
    public void printB() {
       System.out.println("a");
    }
}

ClassA.java

//if they are in the same package, use it directly
//or we must import ClassB explicitly
public class ClassA {
    public void invokeB() {
       ClassB b = new ClassB();
       b.printB();
    }
}

どうすればR言語でこれを達成できますか?

4

1 に答える 1

0

これは、メソッドディスパッチの S3 システムでクラスの割り当てが行われる方法です。Java ユーザーが理解しているように、実際には OOP ではありません。このprotoパッケージは、Java スタイルの OOP により近いフレームワークを提供します。メソッド ディスパッチの S4 システムは、複数引数のシグネチャ マッチングと、より統制のとれたアプローチを提供しました...ほとんどの R ユーザーには理解できないものです。

 newItem <- "bbb"
class(newItem) <- "newClass"
print(newItem)
#[1] "bbb"
#attr(,"class")
#[1] "newClass"
 print.newClass <- function(n) cat("this is of the newClass", n)
 print(newItem)
#this is of the newClass bbb
 otherItem <- "xxxx"
 inherits(otherItem, "newClass")
#[1] FALSE

 class(otherItem) <- c( class(otherItem), "newClass")
 print(otherItem)
#this is of the newClass xxxx

「別のファイル」にある「クラス」について話すときは、おそらくパッケージの構築と、名前空間の管理と供給について学ぶ必要があります。パッケージをアタッチしたり、名前空間を介してロードしたりできます。R 関数はおそらく Java クラスにいくらか似ていますが (英語の使い方はかなり緩いですが、Java でも R でもありません)、R では、「クラス」という用語は、関数をディスパッチするために使用されるオブジェクトの属性を指します。

于 2013-06-11T18:54:57.947 に答える