我有以下要求。
例如:有一个交易表,其中包含交易名称和金额列。我想循环遍历交易并显示其详细信息(交易名称和金额),最后我想在页面的头部(循环之前)部分显示总金额(所有金额的总和)。(将其视为摘要显示)
示例页面结构如下
所有交易的总和 - 200
交易金额 trn1 100 trn2 50 trn3 50
我尝试使用 Yield 和 content_for 标签,但没有成功。
我的代码如下(我在我的 erb 文件中调用。)
<%= yield :transaction_summary %>
<table>
<% total_amount = 0%>
<%for transaction in @transactions%>
<tr>
<td><%= transaction.transaction_name %></td>
<td><%= transaction.amount %></td>
<% total_amount += transaction.amount %>
</tr>
<%end%>
</table>
<% content_for :transaction_summary do %>
<h1>
Sum of all the transactions - <%= total_amount %>
</h1>
<% end %>
Run Code Online (Sandbox Code Playgroud)
和
我在视图内部使用(不在布局内部)
我正在使用 Rails 2.2.2
请帮助我,让我知道是否有更好的方法
提前致谢
干杯
萨梅拉
编辑: …
学习 Scala 并遇到以下困惑:
假设:val filesHere = (new java.io.File(".")).listFiles
这有效:for (fn <- filesHere) yield fn
这有效:filesHere.foreach(println _)
这不起作用:filesHere.foreach(yield _)
错误信息是:<console>:1: error: illegal start of simple expression
为什么最后一项不起作用以及如何使用它使其工作foreach?
我试图按顺序产生一系列传奇效果。这个想法是它将并行yield all([call(foo), call(bar])运行(或者至少以伪并行方式)。call(foo)call(bar)
但是,我希望我的传奇按顺序运行,这意味着我想在启动之前等待foo结束bar(这样我可以取消该过程)。
这个调用数组是动态生成的,所以我可以硬写一系列的yield. 在这种情况下,正确的语法是什么?
我想从Iterable[Try[Int]]所有有效值的列表中提取( Iterable[Int])
val test = List(
Try(8),
Try(throw new RuntimeException("foo")),
Try(42),
Try(throw new RuntimeException("bar"))
)
Run Code Online (Sandbox Code Playgroud)
以下是从 打印所有有效值的方法test:
for {
n <- test
p <- n
} println(p)
// Output
// 8
// 42
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将有效值保存到列表时,我收到了一个错误:
val nums: Seq[Int] = for {
n <- list
p <- n // Type mismatch. Required: IterableOnce[Int], found Try[Int]
} yield(p)
println(nums)
Run Code Online (Sandbox Code Playgroud)
如何修复错误以及它为什么被提出?
我想使用yield关键字将此语句转换为更优雅的东西,以构建用于测试的VM映像列表,但语法让我困惑。
期望的最终目标。
List<VmImages> images;
images[0] - WindowsServer2019
images[1] - WindowsServer2016
images[2] - RhelServer;
images[3] - OpenLogic;
Run Code Online (Sandbox Code Playgroud)
今天的代码如下所示:
for (var i = 0; i < LinuxVMs; i++)
{
switch (i)
{
case 0:
linuxDistros.Add(ConfigLoader.redHat);
break;
case 1:
linuxDistros.Add(ConfigLoader.openLogic);
break;
case 2:
linuxDistros.Add(ConfigLoader.suse);
break;
case 3:
linuxDistros.Add(ConfigLoader.ubuntu);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这感觉是一个很好的例子,使用yield关键字将逻辑简化为这样的,我调用GetLinuxVMs()x次,其中X是的计数LinuxVMs。
private static IEnumerable<VmDistribution> GetLinuxVmDistros()
{
yield return ConfigLoader.redHat;
yield return ConfigLoader.openLogic;
yield return ConfigLoader.suse;
yield return ConfigLoader.canonical;
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何将其集成到我的代码中,这是我尝试过的:
for (var i = 0; i < LinuxVMs; …Run Code Online (Sandbox Code Playgroud) 我试图了解收益率是如何工作的,在我读完这篇文章后,我相信它是可以理解的.
但是我仍然不明白yield和__iter__之间的联系是什么,因为我刚刚发现这段代码有效:
class Vect():
def __init__(self, *args):
self.__a = list(args)
def print_(self):
print self.__a
def __iter__(self):
yield self.__a
asd = Vect(1,2,3,4,5)
for foo in asd:
print foo
Run Code Online (Sandbox Code Playgroud)
我认为当我有一个生成器(一个当时返回单个参数但返回尽可能多的参数直到它到达结束的函数)时,yield会起到这样的作用:"好吧,让我们回复这个论点,但也许我们仍然可以返回另一个".但是在我的示例中,我没有任何生成器,yield"返回"一个列表,并以某种方式访问list的迭代器.我完全不知道发生了什么.
我试图让yield得到工作,我将以下代码从http://php.net/manual/en/language.generators.syntax.php复制并粘贴到一个空文件中并得到错误Parse错误:语法错误,意外[FILENAME]中的'$ i'(T_VARIABLE)
我正在运行XAMPP v3.2.1,它完全适用于我的其余代码(还没有使用yield语句)和PHP 5.4.16.
知道我做错了什么或我应该做什么?
<?php
function gen_one_to_three() {
for ($i = 1; $i <= 3; $i++) {
// Note that $i is preserved between yields.
yield $i;
}
}
$generator = gen_one_to_three();
foreach ($generator as $value) {
echo "$value\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
如果用echo替换yield,则代码没有错误
在我的应用程序中,List<MyItem>只有一个getter:
public List<MyItem> myList
{
get
{
MyHost.GetItemFromID(_i1); //this may be a long operation
MyHost.GetItemFromID(_i2);
MyHost.GetItemFromID(_i3);
MyHost.GetItemFromID(_i4);
MyHost.GetItemFromID(_i5);
}
}
Run Code Online (Sandbox Code Playgroud)
此列表有时需要整体检索,有时只需要访问某些项目:即myList[3].有没有办法不建立整个列表,因为我只需要第四项?
我有以下代码:
object = {
getPastEvents: () => Promise.resolve([1,2,3])
}
function* fetchPastEvents() {
const values = yield object.getPastEvents()
console.log(values)
}
const events = fetchPastEvents()
events.next()
events.next()
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何创建一个getPastEvents返回已定义的函数values.现在,values是undefined.我认为收益率可以解决像异步等待的承诺.
我有以下代码,我需要它使用yield来解压缩列表:
def flat_list(array):
d=[]
for i in array:
if not isinstance(i, list):
yield i
else:
flat_list(i)
Run Code Online (Sandbox Code Playgroud)
例如,flat_list([1, [2, 2, 2], 4])应该返回[1, 2, 2, 2, 4]。我的代码返回[1, 4]。
从上一个问题中我了解到,我不仅需要递归调用一个函数,而且还需要指定它应该做什么。
但是如何将flat_list(i)项目添加到yield项目中?有点像flat_list(i).extend(yield i)。
yield ×10
c# ×2
python ×2
scala ×2
content-for ×1
ecmascript-6 ×1
foreach ×1
generator ×1
javascript ×1
nested ×1
php ×1
recursion ×1
redux ×1
redux-saga ×1
view ×1
xampp ×1
yield-return ×1