如何在Ruby中复制此PHP代码?

如何在Ruby中复制此PHP代码?,php,ruby,lambda,closures,Php,Ruby,Lambda,Closures,我将一些项目转移到Rails,我想复制以下PHP代码: 到目前为止,我有: def html (tag, id = "", hclass = "") hopen = "<#{tag}" hclose = "</#{tag}>" unless id == "" hopen += " id=\"#{id}\"" end unless hclass == "" hopen += " class=\"#{hclass}\"" end h

我将一些项目转移到Rails,我想复制以下PHP代码:

到目前为止,我有:

def html (tag, id = "", hclass = "")
  hopen = "<#{tag}"
  hclose = "</#{tag}>"
  unless id == ""
    hopen += " id=\"#{id}\""
  end

  unless hclass == ""
    hopen += " class=\"#{hclass}\""
  end

  hopen += ">"

  return lambda  { |data| print hopen,data,hclose}
end
这是我的RUBY原型

layout = [:body, :header, :sidebar, :footer]

##I know this isn't right, but how do I create the dynamic functions like PHP???
layout.each {|x| instance_variable_set "@#{x}", 0 }
另外,我需要调用函数,是否在没有调用方法的情况下也可以这样做?如果我要接电话的话,那就太麻烦了

h1 = html(:h1)
mainx =  html(:div )
puts mainx.class
puts mainx.call(h1.call("Blog!")) 

如果您在rails项目中,有很多帮助程序可以帮助您构建html

事实上,有一个名为**content\u tag**的助手方法可以做同样的事情。您可以在此处查看文档:http://apidock.com/rails/v3.1.0/ActionView/Helpers/TagHelper/content_tag

样本使用

content_tag(:tag_i_want, :id => 'my_id', :class => 'my_class') do
   "the content I want inside the tag"
end
产出:

<tag_i_want id="my_id" class="my_class">the content I want inside the tag</tag_i_want>
我想要在标签中显示的内容
第二个问题有点奇怪。进一步解释你想做什么。
?创建@body、@header、@sidebar和@footer变量?仅此而已?

如果您在rails项目中,有很多帮助程序可以帮助您构建html

事实上,有一个名为**content\u tag**的助手方法可以做同样的事情。您可以在此处查看文档:http://apidock.com/rails/v3.1.0/ActionView/Helpers/TagHelper/content_tag

样本使用

content_tag(:tag_i_want, :id => 'my_id', :class => 'my_class') do
   "the content I want inside the tag"
end
产出:

<tag_i_want id="my_id" class="my_class">the content I want inside the tag</tag_i_want>
我想要在标签中显示的内容
第二个问题有点奇怪。进一步解释你想做什么。
?创建@body、@header、@sidebar和@footer变量?仅此而已?

您在这里做了很多工作,但这里有一些关于转换的帮助:

$layout = array('container','header','pmain','lsidebar','rsidebar','footer');

foreach ($layout as $element)
  $$element = html ("div", $element);
据我所知,这是一个数组转换,因此等价物如下:

layout = [ @container, @header, @pmain, @lsidebar, @rsidebar, @footer]

layout.collect! do |element|
  # Using the built-in content_tag method instead of
  # the custom reimplementation with curried parameters.
  content_tag("div", element)
end
没有Ruby方法去引用变量,因为Ruby中的变量的行为方式完全不同。实例变量保存在对象的上下文中,而变量只保存在给定的范围内。可以按名称获取和设置任意实例变量,但通常不能对局部变量执行相同的操作。Ruby中除了
eval{var}
之外,没有与之等价的
$$var
,这是非常不受欢迎的,因为它是如何计算潜在的任意代码的

我真的有种不好的感觉,你为什么要这么做。模板应该是一种避免在如此低的层次上争论问题的方法


如果您是Ruby新手,一件好事是通读有关String和Array的文档,因为它们都塞满了有用的方法。数组还包括可枚举模块,该模块添加了更多内容。

您在这里做了很多工作,但这里有一些关于转换的帮助:

$layout = array('container','header','pmain','lsidebar','rsidebar','footer');

foreach ($layout as $element)
  $$element = html ("div", $element);
据我所知,这是一个数组转换,因此等价物如下:

layout = [ @container, @header, @pmain, @lsidebar, @rsidebar, @footer]

layout.collect! do |element|
  # Using the built-in content_tag method instead of
  # the custom reimplementation with curried parameters.
  content_tag("div", element)
end
没有Ruby方法去引用变量,因为Ruby中的变量的行为方式完全不同。实例变量保存在对象的上下文中,而变量只保存在给定的范围内。可以按名称获取和设置任意实例变量,但通常不能对局部变量执行相同的操作。Ruby中除了
eval{var}
之外,没有与之等价的
$$var
,这是非常不受欢迎的,因为它是如何计算潜在的任意代码的

我真的有种不好的感觉,你为什么要这么做。模板应该是一种避免在如此低的层次上争论问题的方法


如果您是Ruby新手,一件好事是通读有关String和Array的文档,因为它们都塞满了有用的方法。数组还包括可枚举模块,它增加了更多功能。

谢谢,我想我是想重新发明轮子。我想要一个非常紧凑的符号来完成它。仍然好奇如何在Ruby中实现这些功能:)@Len:有很多选择,但你不必全部提供。它可以如此紧凑:
content\u标签:h1,“Blog!”
。然而,您的代码非常接近,所以很明显您正在理解的路上。这里有一篇(老式的)文章可能会有所帮助:是的,我想使用数组来创建那些作为函数指针的变量。另外,我想使用这些文字作为函数的参数。我将从这里学到的东西中做更多的研究…谢谢!谢谢,我想我是想重新发明轮子。我想要一个非常紧凑的符号来完成它。仍然好奇如何在Ruby中实现这些功能:)@Len:有很多选择,但你不必全部提供。它可以如此紧凑:
content\u标签:h1,“Blog!”
。然而,您的代码非常接近,所以很明显您正在理解的路上。这里有一篇(老式的)文章可能会有所帮助:是的,我想使用数组来创建那些作为函数指针的变量。另外,我想使用这些文字作为函数的参数。我将从这里学到的东西中做更多的研究…谢谢!我对Ruby是新手。你的回答真的解释了很多!我知道eval,但我避免了它,就像PHP的瘟疫一样。抛开HTML问题不谈,是否可以获取一个符号数组或其他任何东西,并使用该数组创建命名的“函数指针”,并将元素用作函数中的参数。从我所看到的情况来看,这可能是不可能的。Ruby和JavaScript一样,通常没有函数指针,而是引用函数,这是另一种情况。Ruby中的最佳实践是创建一个Proc,在调用时执行您想要的操作,或者保留您想要调用的方法的符号。例如:
container\u html=lambda{…}
container\u method=:container
后跟
container\u html=some\u object.send(container\u method)
我对Ruby是新手。你的回答真的解释了很多!我知道eval,但我避免了它,就像PHP的瘟疫一样。抛开HTML问题不谈,是否可以获取一个符号数组或其他任何东西,并使用该数组创建命名的“函数指针”,并将元素用作函数中的参数。从我所看到的情况来看,这可能是不可能的。Ruby和JavaScript一样,通常没有函数指针,而是对funct的引用