浏览 1876 次
锁定老帖子 主题:求"代码块"的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-06
有一块代码,用sub包含起来,放在那里都运行,使用的是当前上下文的运行环境。 ruby代码写的多了,总有些代码代码,只有几行,但是到处丢,包装成函数吗,输入,输出参数一大堆。不见得方便。如果任由放那里,这个代码也不好看。 所以想用代码块,或者类似的概念。 不过找了些办法,总觉得不如意。最接近的解决办法是eval,但是。。。 举个例子来说 STR = "j = i+1;" def test i = 100 #j = 0 eval(STR) puts j end test 这上面的执行结果是j没有定义,出错了。 需要这样写才可以,要在eval之前定义好j STR = "j = i+1;" def test i = 100 j = 0 eval(STR) puts j end test 我想要的代码块功能,就是不需要定义j,因为eval中间有赋值了,接下来的代码中直接使用j即可。 这样的代码块功能到底能否实现? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-06
STR = "j = i+1;" def test i = 100 #j = 0 eval(STR+'puts j') end test |
|
返回顶楼 | |
发表时间:2008-11-06
加一个j = j
STR = "j = i + 1" def test() i = 1 eval(STR) j = j puts j end test |
|
返回顶楼 | |
发表时间:2008-11-06
这代码看似好奇怪,为什么要这样写?
|
|
返回顶楼 | |
发表时间:2008-11-06
axgle 写道 STR = "j = i+1;" def test i = 100 #j = 0 eval(STR+'puts j') end test puts 只是表示下面需要用到这个数据,并非一定要puts |
|
返回顶楼 | |
发表时间:2008-11-06
这个问题貌似是无解的,j=j这行很奇怪,也是声明变量作用?
|
|
返回顶楼 | |
发表时间:2008-11-06
最后修改:2008-11-06
jack 写道 这代码看似好奇怪,为什么要这样写?
据说是ruby parser的一个“bug”,和binding以及变量定义顺序有关系,我也不太清楚原理,只是以前遇到过。 |
|
返回顶楼 | |
发表时间:2008-11-06
不过这样写,就没有意义了,比如我三行代码,最终得出三个变量,结果还需要重新赋值一次,还不如放原先的代码呢
|
|
返回顶楼 | |
发表时间:2008-11-06
jack 写道 不过这样写,就没有意义了,比如我三行代码,最终得出三个变量,结果还需要重新赋值一次,还不如放原先的代码呢
如果要写得好看,就不能用eval了,你可以试试看用instance_eval+attr_accessor来包装一下 |
|
返回顶楼 | |