2015-09-14 11 views
6

?invisible sagtWann verschwindet das von unsichtbare() zurückgegebene Objekt nicht mehr?

Return a (temporarily) invisible copy of an object.

Das klammert bedeutet, dass die Unsichtbarkeit nicht ewig dauern wird, aber ich kann nichts finden, dass, wenn es geht weg erklärt. Ich frage mich besonders über Konstrukte wie diese (von this old answer of mine):

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

, wo der äußere invisiblewahrscheinlich unnötig ist (weil print bereits markiert den Rückgabewert unsichtbar). withVisible() meldet, dass der Rückgabewert dieser Funktion in beiden Fällen nicht sichtbar ist, aber ich weiß nicht, ob dies durch die Sprache oder die Art und Weise garantiert wird, wie sie in der aktuellen Implementierung funktioniert.

+0

es sieht der C-Code einfach sein Argument zurückgibt. Also, wenn es temporär ist, kann es bedeuten, dass alles, was vom "unsichtbaren" Aufruf zurückkommt, nicht gedruckt wird, sondern etwas wie "printf" - function (...) + invisible (1); printf (1) 'wird immer noch' 1' drucken, während 'printf <- function (...) unsichtbar ist (1); printf (1) 'wont – jenesaisquoi

Antwort

1

durch Versuch und Irrtum:

# 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

Das sind nützliche Informationen, aber ich hoffe wirklich auf eine Antwort aus der * Sprachspezifikation * (soweit R eine hat) und nicht auf das beobachtete Verhalten der Implementierung. Mit anderen Worten, wir können sehen, was es * tut, aber ist es das, was es tun soll *, und wird es so bleiben? – zwol

+0

sicher, würde ich auch gerne wissen. –

Verwandte Themen