小弟,学 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~