Przyszliśmy do kilku scenariuszy, które chcielibyśmy przekazać operators
jako parameter
w funkcji lub metodzie. According to this post Java doesn't have that ability, hence need to create an Enum
as the primary workaround.Czy istnieje sposób przekazywania operatora arytmetycznego i logicznego jako parametru metody w języku VBA?
E.g.
Function doCalcs(ByRef AND as LogicalOperator, ByRef greater ArithmeticOperator)
Chociaż VBA ma znacznie mniejsze w porównaniu do bibliotek .NET, Java, tworząc Enum
jest dobrze obsługiwane. Być może nie jestem tego świadomy, więc jeśli istnieje możliwość, że VBA ma operator types
lub jakiekolwiek inne obejścia możemy przejść an operator
, zastrzelmy to. (Inne niż if else
/case
, aby sprawdzić ciąg zawierający parametr operatora .. =)) Co Pytam: different from what's mentioned here.
- Pytanie jest zadawane w kategoriach redukcji kodów, optymalizacji.
Np. Jeśli spojrzysz na CountIFS
, ma możliwość pobrania operators
. Nawet jeśli ktoś może wyjaśnić ewentualne prace back-end w tej funkcji,
- Jak to przekonwertować te ciągi do właściwego
operator
? - Czy to jest struktura
Enum
czy coś bardziej wydajnego niż to czy mniejsze?
Odpowiedź na te pytania jest nadal akceptowalna.
To naprawdę zależy od tego, co robisz z parametrem wewnątrz funkcji. Najbardziej użyteczną rzeczą, jaką mogę zrobić z operatorem koncepcyjnym przekazanym jako parametr, jest użycie go jako wywołania zwrotnego. Na przykład, być może mam funkcję 'get3op2()' która akceptuje operator binarny, taki jak '+' lub '*', i zwraca wynik użycia tego operatora na predefiniowanych operandach, takich jak '3' i' 2' . Następnie, hipotetycznie, 'get3op2 (+)' zwróci 5 (to znaczy 3 + 2), podczas gdy 'get3op2 (*)' zwróci 6 (to jest 3 * 2). Czy to właśnie próbujesz zrobić? – psmay
Uwaga: struktura typu enum zawiera jedynie listę opisowych stałych nazw jako wartości dla stałych o długich typach. Jeśli chodzi o twoje pytanie, nie widzę wartości dodanej używania enum. Jeśli chodzi o pytanie, czy możliwe jest przekazanie bezpośrednio operatora: nie jest to w VBA. Jeśli chodzi o obejście problemu, tak, jest, gdzie eval byłby najlepszą opcją, o której wspomniano. W przeciwnym razie mogę nie zrozumieć prawdziwego pytania ... – Trace
@Kim są dwa pytania: '1.' operatory jako parametry' 2.' mechanizm odpowiedzialny za ocenę operatora funkcji CountIFS. – bonCodigo