我希望用Java来实现一些东西:
class Foo{
private int lorem; //
private int ipsum;
public setAttribute(String attr, int val){
//sets attribute based on name
}
public static void main(String [] args){
Foo f = new Foo();
f.setAttribute("lorem",1);
f.setAttribute("ipsum",2);
}
public Foo(){}
}
Run Code Online (Sandbox Code Playgroud)
...基于变量名设置变量而不使用硬编码的变量名并且不使用任何其他数据结构.这可能吗?
我按下内部会发生什么Enter?
除了好奇之外,我的动机是要弄清楚当你发生什么时会发生什么
from sympy import *
Run Code Online (Sandbox Code Playgroud)
并输入一个表达式.它如何从Enter致电
__sympifyit_wrapper(a,b)
Run Code Online (Sandbox Code Playgroud)
在sympy.core.decorators?(这是我尝试检查评估时winpdb带给我的第一个地方.)我猜想有一些内置的eval函数可以正常调用,并且在导入sympy时会被覆盖?
更新 -感谢所有回复.这个问题变得有些混乱,所以如果有人感兴趣,我就开始续集了.
我正在为朋友拼凑一个快速脚本,并偶然发现了一种在PHP中进行模板化的简单方法.
基本上,我们的想法是将html文档解析为heredoc字符串,因此PHP中的变量将被扩展.
passthrough函数允许在字符串中进行表达式求值和函数以及静态方法调用:
function passthrough($s){return $s;}
$_="passthrough";
Run Code Online (Sandbox Code Playgroud)
在heredoc字符串中解析文档的代码非常简单:
$t=file_get_contents('my_template.html');
eval("\$r=<<<_END_OF_FILE_\n$t\_END_OF_FILE_;\n");
echo $r;
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,它使用eval.
任何人都可以想到一种方法来做这种模板而不使用eval,但没有添加解析器或大量的正则表达式疯狂?
没有编写完整的解析器,任何逃避不属于PHP变量的流浪美元符号的建议?流浪的美元符号问题是否会使这种方法不适合"严重"使用?
这是一些模板化的HTML代码示例.
<script>var _lang = {$_(json_encode($lang))};</script>
<script src='/blah.js'></script>
<link href='/blah.css' type='text/css' rel='stylesheet'>
<form class="inquiry" method="post" action="process.php" onsubmit="return validate(this)">
<div class="filter">
<h2>
{$lang['T_FILTER_TITLE']}
</h2>
<a href='#{$lang['T_FILTER_ALL']}' onclick='applyFilter();'>
{$lang['T_FILTER_ALL']}
</a>
{$filter_html}
</div>
<table class="inventory" id="inventory_table">
{$table_rows}
<tr class="static"><th colspan="{$_($cols+1)}">
{$lang['T_FORM_HELP']}
</th></tr>
{$form_fields}
<tr class="static">
<td id="validation" class="send" colspan="{$cols}"> </td>
<td colspan="1" class="send"><input type="submit" value="{$lang['T_SEND']}" /></td>
</tr>
</table>
</form>
Run Code Online (Sandbox Code Playgroud)
也许你可以帮我在文档中找到这个.我正在使用pound-quote能够在执行之前传递未评估的函数名称.例如:
(#'cons 1 ())
;(1)
(defn funcrunner [func a b]
(func a b))
(funcrunner cons 'a ())
;(a)
(funcrunner 'cons 'a ())
'()
(funcrunner #'cons 'a ())
;(a)
#'cons
;#'clojure.core/cons
(resolve (symbol 'cons))
;#'clojure.core/cons
Run Code Online (Sandbox Code Playgroud)
我的猜测是这是一个读者宏.
我的问题是(a)英镑报价(#')的简写是什么?(b)你能解释一下它在做什么吗?(c)你能在文档中找到它吗?(d)它实际上是解析和符号功能的简写吗?
PS - 对于那些不在美国的人 - #也称为'哈希'或'交叉哈希'.
PPS - 我知道我的例子使得这需要多余.我很想知道这是完全冗余还是有特定用例.
我需要对需要在数组中旋转一些值的文档执行更新操作.MongoDB的更新查询目前不允许你$pop,然后$push在更新同一领域.在网上搜索建议后,我认为db.eval()最适合我的使用,因为它确保了原子性,我正在执行的操作非常短,因此它不会长时间锁定数据库.
这是我正在尝试做的事情的一个例子:
db.eval(function (id, newVal) {
doc = db.collection.findOne({_id: id});
doc.values.shift();
doc.values.push(newVal);
db.collection.save(doc);
}, id, newVal);
Run Code Online (Sandbox Code Playgroud)
这完美地运作!然后我启用了mongoDB分析,看看eval()命令花了多少毫秒,我总是得到少于1毫秒的结果:
> db.system.profile.find({op: "command"}, {"millis": 1})
{ "millis" : 0 }
{ "millis" : 0 }
...
Run Code Online (Sandbox Code Playgroud)
这对我来说是个好消息,除了我的应用程序是在python中,所以我使用pymongo客户端来执行eval()命令.(上面的数据来自mongo shell)但现在,当我eval()使用pymongo 运行相同的命令时:
conn = pymongo.Connection(mongo_server_hostname)
db = conn.my_db
db.eval("""function (id, newVal) {
doc = db.collection.findOne({_id: id});
doc.values.shift();
doc.values.push(newVal);
db.collection.save(doc);
}""", id, new_val)
Run Code Online (Sandbox Code Playgroud)
我得到了非常不同的分析结果:
> db.system.profile.find({op: "command"}, {"millis": 1})
{ "millis" : 13 }
{ …Run Code Online (Sandbox Code Playgroud) 我有一个在主机上工作正常的网站,但我目前正在尝试在localhost上安装它.
我已经下载了所有内容并配置为在localhost上工作 - 数据库和URL.
问题是这个错误:
未处理的异常
信息:
语法错误,意外的文件结束位置:
C:\ Program Files(x86)\ EasyPHP-12.1\www\laravel\view.php(386):第118行的eval()代码
我不知道是什么原因造成的.有解决方案吗
PS我已经在我的Windows主机文件中设置了127.0.0.1 myproject.dev.
Alan Kay说,仔细阅读代码并找到Lisp 1.5手册第13页代码中唯一的错误,帮助他更好地理解计算机科学100倍.
有问题的代码是eval&的第一个版本,apply它看起来像现代的lisp(我知道).
既然正确的答案可能已知但丢失了(我的google-fu很不错,我至少搜索了20分钟)我将奖励第一个正确的答案(我将查看编辑时间,所以不要试图作弊)尽快获得250点赏金.
我会建议其他人也为赏金做出贡献,记得上面的视频Alan Kay说这些东西让人回想起爱因斯坦在发现相对论时所处的环境.
文本中的代码用M-Expressions编写.我正在翻译从M表达式转换为S表达式(lisp代码)@ https://github.com/Viruliant/MccarthyMCEval-1.5.
无论如何这里是第13页的翻译引用:
;______________________________________Lisp Meta-Circular Evaluator S-Expression
;this code is written in the order it appears on pages 10-13 in the Lisp 1.5 Manual
;and is translated from the m-expressions into s-expressions
(label mc.equal (lambda (x y)
(mc.cond
((atom x) ((mc.cond ((atom y) (eq x y)) ((quote t) (quote f)))))
((equal (car x)(car y)) (equal (cdr x) (cdr y)))
((quote …Run Code Online (Sandbox Code Playgroud) 我想这样做(在REPL或任何地方)
(defn (symbol "print-string") [k] (println k))
Run Code Online (Sandbox Code Playgroud)
然后能够做到
(print-string "lol")
Run Code Online (Sandbox Code Playgroud)
或者,如果还有其他方法可以从宏中的自定义字符串创建defn,那么你可以把我推向正确的方向吗?
userDefinedFunction = "\x -> x*x :: Int"
main = do
f <- complileFunction userDefinedFunction :: Int -> Int
let results = map f [1,2,3,4]
print $ show results
Run Code Online (Sandbox Code Playgroud)
如何安全地做到这一点?userDefinedFunction应该是不受信任的第三方代码.它应该构建为快速,优化的代码,但不应该直接访问系统.
我想它应该结合Safe Haskell和System.Eval.Haskell.是否有任何项目或教程涉及此问题?
eval ×10
clojure ×2
php ×2
defn ×1
exception ×1
function ×1
haskell ×1
heredoc ×1
interactive ×1
interpreter ×1
java ×1
lambda ×1
laravel ×1
laravel-4 ×1
lisp ×1
metacircular ×1
mongodb ×1
performance ×1
perl ×1
profiling ×1
pymongo ×1
python ×1
reflection ×1
scripting ×1
security ×1
sympy ×1
templates ×1