Is it possible to assign an infix operator to a variable?
operator := <<
If so how is it applied to arguments?
No, it's not possible to store an operator in a variable.
Perhaps the best way is to define a set of operations and have a wrapper struct with an Apply
method:
type Operation int
const (
Left Operation = iota
Right
)
type State struct {
Value int
}
func (s *State) Apply(o Operation) {
switch (o) {
case Left:
s.Value = s.value << 1
case Right:
s.Value = s.value >> 1
}
}
Sample use:
value := State{4} // original value
op := Left
value.Apply(op) // s.Value is now 8
You can wrap the operator in a function (playground):
package main
import (
"fmt"
)
func main() {
operators := []func(int)int{left, left, left, right, right}
value := 4
for _, operator := range operators {
value = operator(value)
fmt.Println(value)
}
}
func left(x int) int {
return x << 1
}
func right(x int) int {
return x >> 1
}
This prints:
8
16
32
16
8