That almost worked. You need:
(1..10).reduce(choice == 1 ? :+ : :*)
Update: it turns out the real issue was the need for an expression template that would not simply default to the scalar product. Apparently throwing an exception (when choice is out of range) is either OK or at least a useful template place-holder. A couple of expressions then come to mind:
(1..10).reduce({1 => :+, 2 => :*}[choice])
(1..10).reduce([nil, :+, :*][choice])