В Javascript, например, функции рассматриваются как один и тот же смешанный тип, как и все остальные (int
, string
, float
, bool
). Таким образом, вы можете создавать функции «на лету», назначать их вещам и называть их позже. Это полезно, но не то, что вы хотите использовать, или вы будете путать всех, кто должен поддерживать ваш код после вас ...
Это какой-то код, с которым я играл, чтобы увидеть, насколько глубоко это отверстие кролика идет:
var x = new Object;
x.thingy = new Array();
x.thingy[0] = function(){ return function(){ return function(){ alert('index 0 pressed'); }; }; }
x.thingy[1] = function(){ return function(){ return function(){ alert('index 1 pressed'); }; }; }
x.thingy[2] = function(){ return function(){ return function(){ alert('index 2 pressed'); }; }; }
for(var i=0 ;i<3; i++)
x.thingy[i]()()();
С отрицательными индексами:
x[-c(1:which(x == 'b'), which(x =='e'):length(x))]
#[1] "c" "" "d"
В случае, если e
найдено до b
, возвращается пустой вектор:
(y <- rev(x))
#[1] "e" "d" "" "c" "b" "" "a"
y[-c(1:which(y == 'b'), which(y =='e'):length(y))]
#character(0)
Вы также можете попробовать:
vector[cumsum(vector %in% c("b", "e")) == 1][-1]
[1] "c" "" "d"
Вы также можете сделать что-то вроде этого:
vector <- c("a", "", "b", "c","","d", "e")
vector[seq(which(vector=="b")+1,which(vector=="e")-1)]
#[1] "c" "" "d"