ruby这里的文件

我正在尝试在Ruby中编写一个方法,该方法使用带有输入变量的HTML代码的here-document并相应地填充它们。

我的方法是:

calcForm(left, op, right, result) 

我正在使用的html标签是

   + *   = ????? 

到处都有问号,我的方法必须填写变量left,op,right和result。

例如,

 calcForm(6, "mul", 7, 42) 

应该返回字符串:

   + *   = **42** 

因此,“选择”一词应出现在“添加”或“jul”之后,具体取决于op的值,左侧和右侧的值应填入value =“…”,结果应出现在最后一行。

我是ruby的新手,但到目前为止,这是我对这里的文档的了解:

 the_tags = <<HERE   + *   = #{result} HERE def calcForm(left,op,right,result) 

我被困在这一点上。 我很困惑如何将我的方法calcForm连接到上面的here文档。

任何有关这方面的帮助将不胜感激!

谢谢!

看起来您正在考虑将heredoc视为一种模板,您可以定义一次,内置字符串插值,然后重用。 事实并非如此。 与任何字符串定义一样,字符串插值在定义变量时即时发生。

所以你会这样做

 def calcForm(left,op,right,result) <   = #{result} HERE end 

然而,对于你正在尝试做的事情,一个更好的方法可能是ERB ,它更像你上面的想法; 即它是一个模板。

 require 'erb' template = ERB.new <>  > = <%=result%> HERE def calcForm(left,op,right,result) template.result(binding) end 

请注意,这里的binding是一个神奇的词,意思是“评估当前上下文中的表达式”; 即使用当前定义的变量(传入的参数)。

最简单的答案是在方法中定义并返回字符串,并使用参数名称作为插值变量。

这应该工作:

 def calcForm(left,op,right,result) <   = #{result} HERE end 

我在您的属性周围添加了一些引号以帮助进行HTMLvalidation。 您不需要显式写入return或声明局部变量,因为方法的返回值将始终是最后一个ruby表达式的值。