Sinatra 和 Slim return Ruby 函数
Sinatra and Slim return Ruby function
我有一个使用 Sinatra 构建并使用 Slim 模板的小型 Web 应用程序。
在我的 functions.rb
文件中,我定义了一个名为 $locations
的散列,我想使用一个函数从散列中获取 return 值。这是我拥有的:
# functions.rb
$locations = Hash[
'wa' => Hash[
'capital' => 'Olympia'
],
'or' => Hash[
'capital' => 'Salem'
]
]
def foobar
$locations.each do |key, value|
$locations[key]['capital']
end
end
我的 Slim 文件
/ layout.slim
div#capitals = foobar
呈现时,页面有一个 div,其 ID 为大写字母,但内容只是用括号打印出的整个哈希值。如果我将 each do
的内部更改为: puts $locations[key]['capital']
和 运行 命令行中的函数,它可以完美运行。我怎样才能让它在 Sinatra 中工作?
基本上,我想用 Ruby 来完成这个 PHP 脚本(能够在我的脚本中的任何地方调用该函数并让它打印出 <div>
标签):
<?php
$locations = array(
'wa' => array(
'capital' => 'Olympia'
),
'or' => array(
'capital' => 'Salem'
)
);
function foobar($array) {
foreach ($array as $key => $value) {
echo "<div>" . $array[$key]['capital'] . "</div>";
}
}
foobar($locations);
在您的循环中,value
是 该键的哈希值。此外,您希望 return 向调用者提供大写字母。 #each
枚举元素但 return 是集合,而不是 return 在每次迭代时由块编辑的值。您想要 #map
(或 #collect
):
def foobar
$locations.map do |_key, value|
value['capital']
end
end
或:
def foobar
$locations.values.map do |value|
value['capital']
end
end
更新:我不太了解 Slim,但根据你的 PHP 示例,在我看来你想要这样的东西:
- for capital in foobar
div= capital
我有一个使用 Sinatra 构建并使用 Slim 模板的小型 Web 应用程序。
在我的 functions.rb
文件中,我定义了一个名为 $locations
的散列,我想使用一个函数从散列中获取 return 值。这是我拥有的:
# functions.rb
$locations = Hash[
'wa' => Hash[
'capital' => 'Olympia'
],
'or' => Hash[
'capital' => 'Salem'
]
]
def foobar
$locations.each do |key, value|
$locations[key]['capital']
end
end
我的 Slim 文件
/ layout.slim
div#capitals = foobar
呈现时,页面有一个 div,其 ID 为大写字母,但内容只是用括号打印出的整个哈希值。如果我将 each do
的内部更改为: puts $locations[key]['capital']
和 运行 命令行中的函数,它可以完美运行。我怎样才能让它在 Sinatra 中工作?
基本上,我想用 Ruby 来完成这个 PHP 脚本(能够在我的脚本中的任何地方调用该函数并让它打印出 <div>
标签):
<?php
$locations = array(
'wa' => array(
'capital' => 'Olympia'
),
'or' => array(
'capital' => 'Salem'
)
);
function foobar($array) {
foreach ($array as $key => $value) {
echo "<div>" . $array[$key]['capital'] . "</div>";
}
}
foobar($locations);
在您的循环中,value
是 该键的哈希值。此外,您希望 return 向调用者提供大写字母。 #each
枚举元素但 return 是集合,而不是 return 在每次迭代时由块编辑的值。您想要 #map
(或 #collect
):
def foobar
$locations.map do |_key, value|
value['capital']
end
end
或:
def foobar
$locations.values.map do |value|
value['capital']
end
end
更新:我不太了解 Slim,但根据你的 PHP 示例,在我看来你想要这样的东西:
- for capital in foobar
div= capital