任何人都可以向我展示一些绝对最小的ASP.NET代码来理解Eval()和Bind()?
最好是为您提供两个单独的代码段或可能是Web链接.
我理解eval()在非严格的上下文中是如何工作的,但是eval()在严格模式下使用的情况完全让我迷惑不解.如果eval()是在全球范围内直接调用,变量保存在新的内部eval()范围:
'use strict';
eval('var a = 1;');
console.log(a); // ReferenceError: a is not defined
Run Code Online (Sandbox Code Playgroud)
但是,如果我在全局范围内执行间接调用eval()(应该是同一个东西,对吗?),它就好像它不是在严格模式下(如果你不相信我,请看这个JSFiddle):
'use strict';
(0, eval)('var a = 1;'); // indirect call to eval
console.log(a); // 1???
Run Code Online (Sandbox Code Playgroud)
如果你不明白是什么(0, eval),请参阅为什么谷歌主页使用(0,obj.func)(args)语法?.
至少根据我对如何eval()在严格模式下工作的理解,它意味着(无论eval()是直接还是间接调用)为eval()调用中定义的变量创建一个新的范围,但这似乎不是这里的情况.规范说明如下:
10.4.2输入Eval代码
当控件进入eval代码的执行上下文时,执行以下步骤:
如果没有调用上下文或者eval代码没有通过直接调用(15.1.2.1.1)评估到eval函数那么,
一个.将执行上下文初始化为使用eval代码作为C的全局执行上下文,如10.4.1.1中所述.
其他,
一个.将ThisBinding设置为与调用执行上下文的ThisBinding相同的值.
湾 将LexicalEnvironment设置为与调用执行上下文的LexicalEnvironment相同的值. …
如何打印刚设置的环境变量?
NAME=sam echo "$NAME" # empty
Run Code Online (Sandbox Code Playgroud)
你可以看到这里使用eval它的工作原理.这是这样的吗?
NAME=sam eval 'echo $NAME' # => sam
Run Code Online (Sandbox Code Playgroud) 我想做相当于:
object result = Eval("1 + 3");
string now = Eval("System.DateTime.Now().ToString()") as string
Run Code Online (Sandbox Code Playgroud)
在Biri的链接之后,我得到了这个片段(修改后删除了过时的方法ICodeCompiler.CreateCompiler():
private object Eval(string sExpression)
{
CSharpCodeProvider c = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
StringBuilder sb = new StringBuilder("");
sb.Append("using System;\n");
sb.Append("namespace CSCodeEvaler{ \n");
sb.Append("public class CSCodeEvaler{ \n");
sb.Append("public object EvalCode(){\n");
sb.Append("return " + sExpression + "; \n");
sb.Append("} \n");
sb.Append("} \n");
sb.Append("}\n");
CompilerResults cr = c.CompileAssemblyFromSource(cp, sb.ToString());
if (cr.Errors.Count > 0)
{
throw …Run Code Online (Sandbox Code Playgroud) 我知道这可能是一个新手问题,但我很好奇它的主要好处 eval() - 哪里用得最好?我很感激任何信息.
pd.eval并且eval是pandas API套件中功能强大但被低估的功能,它们的使用远未完全记录或理解.小心适量,eval并且engine可以极大地简化代码,提高性能,并成为创建动态工作流的强大工具.
这个规范QnA的目的是让用户更好地理解这些功能,讨论一些鲜为人知的功能,如何使用它们,以及如何最好地使用它们,以及清晰易懂的示例.这篇文章将讨论的两个主要议题是
parser,df2并x在争论pd.eval,以及它们如何被用来计算表达式eval,eval并且engine,当每个功能是合适的用于动态执行.这篇文章不能替代文档(答案中的链接),所以请完成它!
我将以这样的方式构建一个问题,以便开启对所支持的各种功能的讨论parser.
给出两个DataFrame
np.random.seed(0)
df1 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.choice(10, (5, 4)), columns=list('ABCD'))
df1
A B C D
0 5 0 3 3
1 7 9 3 5
2 2 4 7 6
3 8 8 1 6
4 7 7 8 1
df2
A B C …Run Code Online (Sandbox Code Playgroud) 我有一个Account班级的实例.每个帐户对象都有一个所有者,参考等.
我可以访问帐户属性的一种方法是通过访问器
account.Reference;
Run Code Online (Sandbox Code Playgroud)
但我希望能够使用动态字符串选择器访问它,如:
account["PropertyName"];
Run Code Online (Sandbox Code Playgroud)
就像在JavaScript中一样.所以我会有account["Reference"]哪些会返回值,但我也希望能够在之后分配一个新值,如:
account["Reference"] = "124ds4EE2s";
Run Code Online (Sandbox Code Playgroud)
我注意到我可以使用
DataBinder.Eval(account,"Reference")
Run Code Online (Sandbox Code Playgroud)
获取基于字符串的属性,但使用此属性我无法为属性赋值.
我怎么能这样做?
我可以更换吗?
source(filename, local = TRUE, encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)
同
eval(parse(filename, encoding = 'UTF-8'))
Run Code Online (Sandbox Code Playgroud)
没有任何破损的风险,使UTF-8源文件在Windows上运行?
我目前正在通过加载特定的源文件
source(filename, local = TRUE, encoding = 'UTF-8')
Run Code Online (Sandbox Code Playgroud)
但是,众所周知,这不适用于Windows,完全停止.
作为一种解决方法,Joe Cheng建议使用
eval(parse(filename, encoding = 'UTF-8'))
Run Code Online (Sandbox Code Playgroud)
这看起来效果很好1,但即使在查阅了源代码之后source,我也不明白它们在一个关键细节上的区别:
双方source并sys.source做不是简单地parse,然后eval将文件内容.相反,他们解析文件内容,然后在解析的表达式上手动迭代,然后eval逐个迭代.我不明白为什么这是必要的sys.source(source至少用它来显示详细的诊断,如果有这样的指示;但sys.source不做任何类似的事情):
for (i in seq_along(exprs)) eval(exprs[i], envir)
Run Code Online (Sandbox Code Playgroud)
eval单独声明语句的目的是什么?为什么它直接在子表达式上迭代索引?还有什么其他警告?
为了澄清:我不关心其他参数source和parse …
我希望能够让用户提交任意JavaScript代码,然后将其发送到Node.JS服务器并安全执行,然后将输出发送回多个客户端(作为JSON).eval我想到了这个功能,但我知道这有多个安全问题(用户提交的代码可以访问Node的File API等).我见过一些项目,如Microsoft Web Sandbox和Google Caja,它们允许执行清理标记和脚本(用于在网站上嵌入第三方广告),但似乎这些是客户端工具,我不确定它们是否可以在Node中安全使用.
有没有一种标准的方法来沙盒并在Node中执行不受信任的JavaScript,从而获得输出.尝试做这个服务器端是错误的吗?
编辑:用户能够利用JavaScript的全部功能并不重要,事实上,最好能够选择将哪些API提供给用户代码.
编辑:我将继续使用我发现的内容进行更新.这个Sandcastle模块(bcoe/sandcastle)似乎旨在实现我的想法.不确定它有多安全,但由于我不是太重要,我想如果尝试的话.如果我能成功地做到这一点,我会添加自己的答案.
有没有办法计算存储在JavaScript中的字符串中的公式而不使用eval?
通常我会做类似的事情
var apa = "12/5*9+9.4*2";
alert(eval(apa));
Run Code Online (Sandbox Code Playgroud)
那么,有没有人知道替代品eval?
eval ×10
javascript ×4
c# ×2
accessor ×1
asp.net ×1
bash ×1
bind ×1
databinder ×1
dataframe ×1
ecmascript-5 ×1
node.js ×1
pandas ×1
python ×1
r ×1
reflection ×1
sandbox ×1
sanitize ×1
string ×1