/// <summary>
        /// Create a simple statement line, with a future to generate the actual line.
        /// </summary>
        /// <param name="futureLine"></param>
        /// <param name="addSemicolon"></param>
        public StatementSimpleStatement(Func<string> futureLine, bool addSemicolon = true, string[] dependentVars = null, string[] resultVars = null)
        {
            futureLine
                .ThrowIfNull(() => new ArgumentException("StatemeintSimpleStatment should not be called with a null input line"));

            AddSemicolon = addSemicolon;
            _statementGenerator = new EvalStringOnce(() => CleanLine(futureLine(), AddSemicolon));

            NeverLift = false;
            DependentVariables = dependentVars == null ? new string[0] : dependentVars;
            ResultVariables = resultVars == null ? new string[0] : resultVars;
        }
        /// <summary>
        /// Create a simple statement line, with a future to generate the actual line.
        /// </summary>
        /// <param name="futureLine"></param>
        /// <param name="addSemicolon"></param>
        public StatementSimpleStatement(Func <string> futureLine, bool addSemicolon = true, string[] dependentVars = null, string[] resultVars = null)
        {
            futureLine
            .ThrowIfNull(() => new ArgumentException("StatemeintSimpleStatment should not be called with a null input line"));

            AddSemicolon        = addSemicolon;
            _statementGenerator = new EvalStringOnce(() => CleanLine(futureLine(), AddSemicolon));

            NeverLift          = false;
            DependentVariables = dependentVars == null ? new string[0] : dependentVars;
            ResultVariables    = resultVars == null ? new string[0] : resultVars;
        }
        /// <summary>
        /// Create a simple statement line with a given string.
        /// </summary>
        /// <param name="line"></param>
        /// <param name="addSemicolon"></param>
        public StatementSimpleStatement(string line, bool addSemicolon = true, string[] dependentVars = null, string[] resultVars = null)
        {
            if (line == null)
                throw new ArgumentNullException("line can't be null!");

            AddSemicolon = addSemicolon;

            _statementGenerator = new EvalStringOnce(() => CleanLine(line, AddSemicolon));

            NeverLift = false;
            DependentVariables = dependentVars == null ? new string[0] : dependentVars;
            ResultVariables = resultVars == null ? new string[0] : resultVars;
        }
        /// <summary>
        /// Create a simple statement line with a given string.
        /// </summary>
        /// <param name="line"></param>
        /// <param name="addSemicolon"></param>
        public StatementSimpleStatement(string line, bool addSemicolon = true, string[] dependentVars = null, string[] resultVars = null)
        {
            if (line == null)
            {
                throw new ArgumentNullException("line can't be null!");
            }

            AddSemicolon = addSemicolon;

            _statementGenerator = new EvalStringOnce(() => CleanLine(line, AddSemicolon));

            NeverLift          = false;
            DependentVariables = dependentVars == null ? new string[0] : dependentVars;
            ResultVariables    = resultVars == null ? new string[0] : resultVars;
        }