type.go 1020 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. type (
  7. _unknown struct {
  8. s string
  9. }
  10. _number struct {
  11. num float64
  12. word string
  13. }
  14. _bool struct {
  15. b bool
  16. word string
  17. }
  18. _word struct {
  19. word string
  20. }
  21. _list struct {
  22. list []string
  23. param []string
  24. body []string
  25. env environ
  26. }
  27. value interface {
  28. fmt.Stringer
  29. }
  30. environ map[string]value
  31. )
  32. func (val *_unknown) String() string {
  33. return val.s
  34. }
  35. func (val *_number) String() string {
  36. if len(val.word) > 0 {
  37. return val.word
  38. }
  39. return strconv.FormatFloat(val.num, 'g', -1, 64)
  40. }
  41. func (val *_number) Value() float64 {
  42. return val.num
  43. }
  44. func (val *_bool) String() string {
  45. if len(val.word) > 0 {
  46. return val.word
  47. }
  48. return strconv.FormatBool(val.b)
  49. }
  50. func (val *_bool) Value() bool {
  51. return val.b
  52. }
  53. func (val *_word) String() string {
  54. return val.word
  55. }
  56. func (val *_word) Value() string {
  57. return val.word
  58. }
  59. func (val *_list) String() string {
  60. return makeList(val.list)
  61. }
  62. func (val *_list) Value() []string {
  63. return val.list
  64. }