2012-05-25 7 views

答えて

14

EDIT:

歴史のビットを与える:setClassではオプションのアクセスを '関数は、クラスのみを提供ゲッターとセッターを介してアクセスすることができ、いわゆる「特権スロット」を作成するために提供されました。これは、(getterを提供しないことによって)プライベートスロットを作成することを可能にするが、この機能は決して実装されていない。

アクセスとバージョンは、S-Plusとの互換性のために含まれていますが、 は現在は無視:?setClassのヘルプページには、現在読み込みます。すべてのスロットが到達可能である@表記を介するなど


だから、プライベートとパブリックのスロットのようなものはありません。個人的には、パッケージに含まれているgetterとsetterを使用することで、容易に到達できないオブジェクトからの情報を使用できるので、非常に満足しています。また、getterやsetterによって生成されるオーバーヘッドを避けることで、重い計算を節約することもできます。

私は、パブリックと "プライベート"スロットを区別するための命名規則を知らない。 「プライベート」スロットの前にドットを付けることで、区別することはできますが、スロットの動作には影響しません。ほとんどのRプログラマは公的および私的なスロットを気にしないので、一般的な習慣でもありません。彼らは、平均的なユーザーが到達すべきではないスロットのゲッターとセッターを提供していません。

簡単な例を挙げてみましょう:次の例では、2つのスロットを持つクラスと、1つのスロットだけのゲッターとセッターを作成します。

setClass("Example", 
    representation(
    aslot = "numeric", 
    .ahiddenslot = "character" 
) 
) 

setGeneric("aslot", function(x) standardGeneric("aslot")) 

setMethod("aslot","Example",function(x){ 
    [email protected] 
}) 

setGeneric("aslot<-", function(x,value) standardGeneric("aslot<-")) 

setMethod("aslot<-","Example",function(x,value){ 
    [email protected] <- value 
    x 
}) 

あなたはまた、単に隠されたスロットプリントアウトしていないshow方法を設定することができます

> X <- new("Example",aslot=1,.ahiddenslot="b") 
> X 
Example with value for aslot: 1 
> aslot(X) 
[1] 1 
> aslot(X) <- 3 

しかし.ahiddenslot:

setMethod("show","Example",function(object){ 
    cat("Example with value for aslot: ", [email protected],"\n") 
}) 

これは、次の通常の使用を提供しますまだ到達可能です:

> slot(X,".ahiddenslot") 
[1] "b" 
+1

T彼は "。"ほとんどの場合、それは私がそれを区別することによって私の意図の点で物事を直に保つのに役立つと思うので、意味があります。彼らが保護されているかどうかは気にしません。 –

関連する問題