Ruby eval %[.....] 与原有 ruby 代码的区别?

shlallen · 2013年04月17日 · 最后由 heimirror 回复于 2013年04月17日 · 3067 次阅读

小弟,学 ruby 不深,有个疑惑: eval %[……] :这个句法的意思就是,把内部的文本内容翻译成 Ruby 可执行的语句,使其可以执行; 那这和直接把文本内容的 ruby 代码放到外部有什么区别呢?

比如: eval %[puts 1+1] 与 puts 1+1 有什么区别? 貌似结果相同,既然如此,eval % [.......] 存在的意义是什么嘞?

弱菜请教大神们

%[puts 1+1] 只是一个 string 吧。eval 是一个独立的方法。

irb 啊。

#2 楼 @zgm 说了 irb 的结果一样啊

eval 是元编程的方法,可以执行动态的代码。

#3 楼 @shlallen 那你想想 irb 怎么实现的呗

#5 楼 @zgm 笑死了 你的回复跟昨天的百度一下的暴漫效果一样

eval %(.....) 可以动态生成代码,这是所有动态语言的精髓。

#6 楼 @zj0713001 哎,我也这么感觉了。

本来就是这么玩的咯 楼主肯定没有什么用编译型语言的经验啊 所以没有感受到编译型语言不能动态添加代码执行的痛苦。。

偷偷的说 erb 里写一个 eval(params[:commend]) 就能成为所谓的一句话木马了

#10 楼 @zj0713001 这个不错 可以给人挂马了 O(∩_∩)O~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号