Your code works fine, for me.
(when (member last-command (list 'foo 'bar 'bob 'baz)) (do-something))
last-command is typically a symbol, not a string. There is no reason to use
string-equal for two symbols. It works, but it is slower - it just converts the symbols to strings and then compares those strings.
The best way to compare two symbols is with
eq compares two Lisp objects, i.e., they must be the same object to return non-
nil. For a list,
memq tests membership using
Second, even if the things to compare were strings,
member uses the test
equal, which uses
string-equal for string comparison.
If the question is really about
last-command, and not about comparing symbols or strings, then be aware that
last-command doesn't always return a symbol - see
C-h v last-command.
The last command executed.
Normally a symbol with a function definition, but can be whatever was found
in the keymap, or whatever the variable `this-command' was set to by that
All the more reason to test with
member, which uses
(Also, you can just write
'(foo bar bob baz) instead of
(list 'foo 'bar 'bob 'baz). But this is unimportant.)