map_function_interface_var.go 806 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package main
  2. import "fmt"
  3. type obj interface{}
  4. func main() {
  5. // define a generic lambda function mf:
  6. mf := func(i obj) obj {
  7. switch i.(type) {
  8. case int:
  9. return i.(int) * 2
  10. case string:
  11. return i.(string) + i.(string)
  12. }
  13. return i
  14. }
  15. res1 := mapFunc(mf, 0, 1, 2, 3, 4, 5)
  16. for _, v := range res1 {
  17. fmt.Println(v)
  18. }
  19. println()
  20. res2 := mapFunc(mf, "0", "1", "2", "3", "4", "5")
  21. for _, v := range res2 {
  22. fmt.Println(v)
  23. }
  24. }
  25. func mapFunc(mf func(obj) obj, list ...obj) ([]obj) {
  26. result := make([]obj, len(list))
  27. for ix, v := range list {
  28. result[ix] = mf(v)
  29. }
  30. // Equivalent:
  31. /*
  32. for ix := 0; ix<len(list); ix++ {
  33. result[ix] = mf(list[ix])
  34. }
  35. */
  36. return result
  37. }
  38. /* Output:
  39. 0
  40. 2
  41. 4
  42. 6
  43. 8
  44. 10
  45. 00
  46. 11
  47. 22
  48. 33
  49. 44
  50. 55
  51. */