本文整理匯總了Golang中github.com/danwakefield/gosh/variables.Scope.Push方法的典型用法代碼示例。如果您正苦於以下問題:Golang Scope.Push方法的具體用法?Golang Scope.Push怎麽用?Golang Scope.Push使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/danwakefield/gosh/variables.Scope
的用法示例。
在下文中一共展示了Scope.Push方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: Eval
func (n NodeCommand) Eval(scp *variables.Scope, ioc *T.IOContainer) T.ExitStatus {
// A line with only assignments applies them to the Root Scope
// We check this first to avoid unnecessary scope Push/Pop's
if len(n.Args) == 0 {
for k, v := range n.Assign {
scp.Set(k, v.Expand(scp))
}
return T.ExitSuccess
}
// Minimum of len(n.Args) after expansions, Likely
// that it will be more after globbing though
expandedArgs := []string{}
for _, arg := range n.Args {
expandedArgs = append(expandedArgs, arg.Expand(scp))
}
// Order of precedence:
// Relative command > Builtin > User Function > Other external command
command := expandedArgs[0]
builtinFunc, builtinFound := builtins.All[command]
userFunc, userFuncFound := scp.Functions[command]
if strings.ContainsRune(command, '/') || (!builtinFound && !userFuncFound) {
scp.Push()
defer scp.Pop()
for k, v := range n.Assign {
scp.Set(k, v.Expand(scp), variables.LocalScope)
}
return n.execExternal(scp, ioc, expandedArgs)
}
if builtinFound {
return builtinFunc(scp, ioc, expandedArgs[1:])
}
if userFuncFound {
x := userFunc.(NodeFunction)
return x.EvalFunc(scp, ioc, expandedArgs[1:])
}
return T.ExitUnknownCommand
}