Похоже, что такое поведение невозможно с switch()
.
Как предлагается в комментариях, лучшим вариантом было реализовать мою собственную версию.
Таким образом, я добавил обновление для моего optional
пакета, чтобы реализовать эту функцию ( CRAN ).
В этом обновлении теперь вы можете использовать сквозной оператор в функции сопоставления с образцом match_with
.
Шаблон дизайна в вопросе можно воспроизвести следующим образом:
library(optional)
a <- 1
match_with(a
1, fallthrough(function() "Processing the first step..."),
2, fallthrough(function() "Processing the second step..."),
3, function() "Processing the third step...",
4, function() "All steps have already been processed!"
)
## [1] "Processing the first step..." "Processing the second step..." "Processing the third step..."
Вы можете заметить, что match_with()
очень похож на switch()
, но имеет расширенные возможности. Например. шаблоны могут быть списками или функциональными последовательностями, а не простыми объектами для сравнения:
library("magrittr")
b <- 4
match_with(a,
. %>% if (. %% 2 == 0).,
fallthrough( function() "This number is even" ),
. %>% if ( sqrt(.) == round(sqrt(.)) ).,
function() "This number is a perfect square"
)
## [1] "This number is even" "This number is a perfect square"