2010-11-03 54 views
2
eval('puts "ff"\nputs "ff"') 

我试图在一个评估中使用两个表达式,但它不执行?如何在ruby中评估多行代码?

我如何做到这一点?我想知道,因为我想动态执行部分代码。

回答

2

做:

eval('puts "ff";puts "ff"') 
5
eval("puts 'ff'\nputs 'ff'") 

也适用。 '\n'被视为字面上的斜线和n,因为单引号与双引号的工作方式不同。

+0

真的吗?希望你能指出一些文档吗?我认为互换引号并不重要? – Zabba 2010-11-03 06:34:40

+0

@Zabba:你可以在irb中试试它,或者你可以看看[单引号字符串中的反斜杠与Ruby中的双引号字符串中的反斜杠?](http://stackoverflow.com/questions/648156/backslashes-in -single-quoted-strings-vs-double-quoted-strings-in-ruby) – 2010-11-03 06:48:13

3

我用这个:

eval %{ 
    puts 'ff' 
    puts 'hello' 
} 
5

随着定界符。传递文件和行号以在后面的跟踪中提供参考信息。

eval(<<-CODE, __FILE__, __LINE__ +1) 
    some(:ruby); 
    code 
    # and comments 
CODE 
+0

这应该是被接受的答案 - 它适用于大型多行语句并且有助于调试。好一个! – 2013-01-07 19:49:35