2015-09-14 70 views
6

?invisible什麼時候由invisible()返回的對象停止不可見?

Return a (temporarily) invisible copy of an object.

這括號意味着隱形不會永遠持續下去,但我無法找到任何東西,當它消失瞭解釋。我特別想知道像這樣的(從this old answer of mine)結構:

printf <- function(...) invisible(print(sprintf(...))) 

,其中外invisible可能不必要的(因爲print已經標明其返回值不可見的)。 withVisible()報告說,這個函數的返回值是不可見的,但我不知道這是否由語言保證,或者只是它在當前實現中發生的方式。

+0

看起來C代碼簡單地返回它的參數。所以,暫時的,它可能意味着從'invisible'調用中返回的任何東西都不會被打印出來,但是像'printf < - function(...)+ invisible(1); printf(1)'仍然會打印'1',而'printf < - function(...)不可見(1); printf(1)'不會 – jenesaisquoi

回答

1

通過試驗和錯誤:

# invisible 
withVisible(invisible())$visible 
[1] FALSE 

### passing the invisible value through a function seems to 
# preserve the invisibility 
withVisible(identity(invisible()))$visible 
[1] FALSE 

# the <- operator just returns its arguments, so it confirms the above 
withVisible(i <- invisible())$visible 
[1] FALSE 
# but the assigned value is no longer invisible 
withVisible(i)$visible 
[1] TRUE 

### passing an invisible value as argument keeps the invisibility 
f <- function(x) withVisible(x)$visible 
f(1) 
[1] TRUE 
f(invisible(1)) 
[1] FALSE 

### every other operation seems to cancel the invisibility. 
# e.g. assigning an invisible value cancels the it 
i <- invisible() 
withVisible(i)$visible 
[1] TRUE 

withVisible(invisible(1) + 1)$visible 
[1] TRUE 
+0

這是有用的信息,但我真的希望從*語言規範*(在R的範圍內)而不是觀察到的實現行爲的答案。換句話說,我們可以看到它做了什麼*,但它是它應該做什麼*,它會保持這種狀態嗎? – zwol

+0

當然,我也想知道。 –

相關問題