예제 #1
0
파일: compare.go 프로젝트: kooksee/gisp2
// LessThanNil 实现三值 Less
func LessThanNil(x interface{}) p.P {
	return func(st p.State) (interface{}, error) {
		val, _ := p.One(st)
		if x == nil || val == nil {
			return false, nil
		}
		return nil, st.Trap("expect nil value but: %v", val)
	}
}
예제 #2
0
파일: compare.go 프로젝트: kooksee/gisp2
// ListValue 检查 state 中下一个值是否是列表
func ListValue(st p.State) (interface{}, error) {
	val, err := p.One(st)
	if err == nil {
		if _, ok := val.(List); ok {
			return val, nil
		}
		return nil, fmt.Errorf("expect a list value but %v ", val)
	}
	return nil, fmt.Errorf("expect a list value but error: %v", err)
}
예제 #3
0
파일: compare.go 프로젝트: kooksee/gisp2
// TimeValue 判断 state 中下一个元素是否为 time.Time
func TimeValue(st p.State) (interface{}, error) {
	val, err := p.One(st)
	if err == nil {
		if _, ok := val.(tm.Time); ok {
			return val, nil
		}
		return nil, fmt.Errorf("expect a time value but: %v", err)
	}
	return nil, fmt.Errorf("expect a time value but error: %v", err)
}
예제 #4
0
파일: compare.go 프로젝트: kooksee/gisp2
// FalseIfHasNil 实现一个 is nil 判断
func FalseIfHasNil(st p.State) (interface{}, error) {
	for {
		val, err := p.One(st)
		if err != nil {
			if err == io.EOF {
				return nil, fmt.Errorf("False If Nil Error: Found EOF.")
			}
			return nil, err
		}
		if val == nil {
			return false, err
		}
	}
}