标签: eval

是否有任何用例需要在Perl中使用字符串eval?

你能提供任何eval EXPR真正需要使用的例子吗?我问,因为它一般气馁.

perl eval

12
推荐指数
3
解决办法
686
查看次数

在Ruby中将参数传递给包含的模块?

我希望能够实现像ruby那样的所有优秀插件,以便你可以这样做:

acts_as_commentable
has_attached_file :avatar
Run Code Online (Sandbox Code Playgroud)

但我有一个约束:

该辅助方法只能包含一个模块; 它无法定义任何变量或方法.

这样做的原因是,我希望选项哈希定义类似的东西type,并且可以将其转换为20个不同的"主力"模块中的一个,所有这些我可以在这样的行中总结:

def dynamic_method(options = {})
 include ("My::Helpers::#{options[:type].to_s.camelize}").constantize(options)
end
Run Code Online (Sandbox Code Playgroud)

那些'workhorses'会处理选项,做的事情如下:

has_many "#{options[:something]}"
Run Code Online (Sandbox Code Playgroud)

这是结构的样子,我想知道你是否知道拼图中缺失的部分:

# 1 - The workhorse, encapsuling all dynamic variables
module My::Module
  def self.included(base)
    base.extend ClassMethods
    base.class_eval do
      include InstanceMethods
    end
  end

  module InstanceMethods
    self.instance_eval %Q?
      def #{options[:my_method]}
        "world!"
      end
    ?
  end

  module ClassMethods
  end
end

# 2 - all this does is define that helper method
module HelperModule
  def self.included(base)
    base.extend(ClassMethods)
  end

  module ClassMethods

    def dynamic_method(options = {})
      # …
Run Code Online (Sandbox Code Playgroud)

ruby module eval dynamic

12
推荐指数
1
解决办法
9113
查看次数

clojure解析函数来自字符串名称

在clojure 1.2RC1中,我希望获得一个基于其名称为字符串的函数并对其进行评估.

功能定义

(ns my-ns)

(defn mycar [x] (first x))
Run Code Online (Sandbox Code Playgroud)

以下工作:

((ns-resolve *ns* (symbol "mycar")) '(3 4))
((intern *ns* (symbol "mycar")) '(3 4))
((eval (symbol "mycar")) '(3  4))
Run Code Online (Sandbox Code Playgroud)

但他们看起来很难看.有没有更好的办法?如果没有,上面哪个是最惯用的?

eval clojure

12
推荐指数
1
解决办法
4251
查看次数

将Eval("bitValue")转换为Bool

我在ItemTemplate中有一个带有HyperLink控件的列表视图.如果返回值为0(false),我想显示链接,如果是1(true)则不显示链接.

到目前为止我有这个:

<asp:HyperLink runat="server" ID="lnkReview"
  NavigateUrl='<%# Eval("EnquiryID", @"selectcompany.aspx?enq={0}")%>'
  Text="Review Enquiry"
  Visible='<%# ((bool)Eval("Locked"))==true? false : true %>' />
Run Code Online (Sandbox Code Playgroud)

...但这会导致"指定的强制转换无效"异常.

我在其他地方看到的例子,这应该有效.我可以确认Locked列只返回0或1(来自SQL Server) - 当然这些应该很容易从bit/int转换为bool?

c# sql-server asp.net casting eval

12
推荐指数
3
解决办法
4万
查看次数

包含<script>标签与使用eval相比,是否有性能提升?

我已经看到很多关于如何动态添加代码的建议(来源):

var myScript = document.createElement("script");
myScript.setAttribute("type","text/javascript");
myScript.innerHTML += 'alert("Hello");';
document.body.appendChild(myScript);
Run Code Online (Sandbox Code Playgroud)

而不是eval像现在这样

eval('alert("Hello");');
Run Code Online (Sandbox Code Playgroud)

人们抱怨性能下降和安全问题eval,但我无法想象添加<script>标签会更快或更安全.


编辑人想知道为什么我evaling微不足道的东西alert("Hello"),这是为什么:

我有一个数据库,比方说,1,000,000,000,000个脚本= P显然我不能加载每一个,而是用户可以加载任何他们想要的.脚本存储在服务器端的arbritrary位置.目前我通过其脚本名称请求(xmlhttprequest解释为javascript)脚本,服务器将以某种方式找到它并将其作为文本返回,立即执行/解释.我想知道将脚本作为文本返回是否更好,然后从中创建一个<script>标记.

此外,这不是eval()和附加脚本标记之间Javascript差异的重复,它处理功能差异,这里我想要性能和安全性差异.

javascript performance eval

12
推荐指数
1
解决办法
2811
查看次数

在R中创建表达式树

替代函数以R树的形式创建一个可以解析的语言对象.如何使用列表从头开始创建树,否则将其提供给eval?

# substitute gives a tree representation of the expression
a=1; b=2;
e1 = substitute(a+2*b)
eval(e1)      #gives 5 as expected
e1            # is type language
e1[[1]]       # this is `+`
e1[[2]]       # this is 'a' type symbol
e1[[3]]       # this is type language
e1[[3]][[1]]  # this is `*`  etc....
Run Code Online (Sandbox Code Playgroud)

我想知道如何以e1编程方式重建对象.理想情况下,我创建了一个复杂列表的对象,其中包含正确的对象,也许我会as.languagelist对象上调用一些对象.然而,这不起作用.例如:

# how to construct the tree?
eval(list(as.symbol('+'),1,1))                # does not return 2
eval(as.expression(list(as.symbol('+'),1,1))) # does not return 2
Run Code Online (Sandbox Code Playgroud)

一种方法是生成字符串'1 + 1'然后解析它,但是当你首先拥有树时,生成字符串以再次解析它们似乎并不优雅!

eval(parse(text='1+1')) …
Run Code Online (Sandbox Code Playgroud)

tree eval r substitution

12
推荐指数
2
解决办法
1812
查看次数

GNU make 3.81:eval函数不起作用?

我最近从GNU make文档中找到了这段代码,它引用了eval函数.我真的很喜欢它,但是当我尝试在我的机器上测试它(make 3.81/Debian)时,它所做的只是尝试链接服务器而不首先编译c文件...为什么?make 3.81不兼容吗?

壳牌产量:

$ make
cc     -o server
cc: no input files
Run Code Online (Sandbox Code Playgroud)

码:

 PROGRAMS    = server client

 server_OBJS = server.o server_priv.o server_access.o
 server_LIBS = priv protocol

 client_OBJS = client.o client_api.o client_mem.o
 client_LIBS = protocol

 # Everything after this is generic

 .PHONY: all
 all: $(PROGRAMS)

 define PROGRAM_template =
  $(1): $$($(1)_OBJS) $$($(1)_LIBS:%=-l%)
  ALL_OBJS   += $$($(1)_OBJS)
 endef

 $(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog))))

 $(PROGRAMS):
         $(LINK.o) $^ $(LDLIBS) -o $@

 clean:
         rm -f $(ALL_OBJS) $(PROGRAMS)
Run Code Online (Sandbox Code Playgroud)

makefile eval

12
推荐指数
1
解决办法
2354
查看次数

使用Python的eval()时locals和globals有什么区别?

如果将变量作为全局变量或本地变量传递给Python的函数eval(),为什么会有所不同?

正如文档中描述的__builtins__,如果没有明确给出,Python将复制到全局变量.但也必须有一些我看不到的其他差异.

请考虑以下示例函数.它需要一个字符串code并返回一个函数对象.不允许内置(例如abs()),但math包中的所有功能.

def make_fn(code):
    import math
    ALLOWED_LOCALS = {v:getattr(math, v)
        for v in filter(lambda x: not x.startswith('_'), dir(math))
    }
    return eval('lambda x: %s' % code, {'__builtins__': None}, ALLOWED_LOCALS)
Run Code Online (Sandbox Code Playgroud)

它按预期工作,不使用任何本地或全局对象:

   fn = make_fn('x + 3')
   fn(5) # outputs 8
Run Code Online (Sandbox Code Playgroud)

但它无法使用这些math功能:

   fn = make_fn('cos(x)')
   fn(5)
Run Code Online (Sandbox Code Playgroud)

这会输出以下异常:

   <string> in <lambda>(x)
   NameError: global name 'cos' is not defined
Run Code Online (Sandbox Code Playgroud)

但是当传递与globals相同的映射时,它可以工作:

def make_fn(code):
   import math
   ALLOWED = {v:getattr(math, v)
      for …
Run Code Online (Sandbox Code Playgroud)

python eval

12
推荐指数
1
解决办法
2861
查看次数

str(list)如何工作?

为什么str(list)返回我们在控制台上看到列表的方式?str(list)工作怎么样?(对CPython代码的任何引用str(list))?

>>> x = ['abc', 'def', 'ghi']
>>> str(x)
"['abc', 'def', 'ghi']"
Run Code Online (Sandbox Code Playgroud)

要获得原始列表,str(list)我必须:

>>> from ast import literal_eval
>>> x = ['abc', 'def', 'ghi']
>>> str(x)
"['abc', 'def', 'ghi']"
>>> list(str(x))
['[', "'", 'a', 'b', 'c', "'", ',', ' ', "'", 'd', 'e', 'f', "'", ',', ' ', "'", 'g', 'h', 'i', "'", ']']
>>> literal_eval(str(x))
['abc', 'def', 'ghi']
Run Code Online (Sandbox Code Playgroud)

为什么不list(str(list))转动str(list)回原来的名单?

或者我可以使用:

>>> eval(str(x))
['abc', 'def', 'ghi']
Run Code Online (Sandbox Code Playgroud)

literal_eval …

python string eval list python-internals

12
推荐指数
2
解决办法
2万
查看次数

替代:替代评估

如果替换是在变量中传递的,那么第一个和第二个替换是否相等?

#!/usr/bin/env perl6
use v6;

my $foo = 'switch';
my $t1 = my $t2 = my $t3 = my $t4 = 'this has a $foo in it';

my $replace = prompt( ':' ); # $0

$t1.=subst( / ( \$ \w+ ) /, $replace );
$t2.=subst( / ( \$ \w+ ) /, { $replace } );
$t3.=subst( / ( \$ \w+ ) /, { $replace.EVAL } );
$t4.=subst( / ( \$ \w+ ) /, { ( $replace.EVAL ).EVAL } );

say …
Run Code Online (Sandbox Code Playgroud)

replace eval subst perl6

12
推荐指数
1
解决办法
132
查看次数