2016-06-08 39 views
1

當我在R中創建一個S4類的新實例時,我希望新創建的對象具有唯一的id字段。我試圖通過uuid包中的UUIDgenerate()來實現它。的問題是,我獲得相同UUID在每個新對象實例:UUIDgenerate()與一個s4類在每個實例中產生相同的uuid

library(uuid) 
setClass("C", 
    representation=representation(
    id = "character" 
), 
    prototype = prototype(
    id = UUIDgenerate(use.time = TRUE)) 
) 


new("C") 
An object of class "C" 
Slot "id": 
[1] "1e07d7c2-2d71-11e6-b5e1-e1f59d8ccf09" 

new("C") 
An object of class "C" 
Slot "id": 
[1] "1e07d7c2-2d71-11e6-b5e1-e1f59d8ccf09" 

new("C") 
An object of class "C" 
Slot "id": 
[1] "1e07d7c2-2d71-11e6-b5e1-e1f59d8ccf09" 

在R命令行調用UUIDgenerate()依次產生每次不同UUIDS

我到哪裏去了?

感謝

回答

1

得到了本·塔珀R-幫助列表上了很好的解決。定義「初始化」功能可以更加清晰地解決問題:

setMethod("initialize", "C", 
     function(.Object){ 
      [email protected] = UUIDgenerate(use.time = TRUE) 
      .Object 
     }) 
1

正在發生的事情是,當你運行setClass語句,而不是當您使用newUUIDgenerate呼叫評估。它無關UUIDgenerate本身 - 例如此類行爲將依據sys.time單獨時相同:

setClass("D", 
     representation=representation(
      id = "character" 
     ), 
     prototype = prototype(
      id = as.character(Sys.time())) 
) 

爲了得到你想要的,你可以編寫創建「C」類的對象的功能是什麼像這樣:

NewC<-function(){ 
    new("C", id=UUIDgenerate(use.time = TRUE)) 
} 

這應該每次使用不同的UUID創建類「C」的新對象。

+0

沒錯。謝謝。 – Servet

相關問題