lambda - 如何使用 Google Blogger Lambda 运算符

标签 lambda blogger

Google Blogger 为其模板语言实现了一组新的 Lambda 表达式运算符。见:https://blogger.googleblog.com/2016/05/more-custom-template-flexibility.htmlhttps://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY .

给出的示例代码(b:if/修正)是:

<!-- Show a Flower image if the post has the label flower -->
<b:if cond='data:post.labels any (l => l.name == "Flower")'>
  <img src=’/img/flower.jpg’ />
</b:if>

我不知道如何让它在模板中工作。有人请提供一些工作代码我可以放入模板并查看它的工作。

更新:
这似乎有效。但是如何,或者我可以删除循环吗?
<b:section class='Test1' id='Test1' maxwidgets='' showaddelement='no'>
    <b:widget id='Blog2' locked='true' title='Blog Posts' type='Blog' version='1' visible='true'>
        <b:includable id='main'>

            <b:loop values='data:posts' var='post'>
                <h1>Post found</h1>

                <b:if cond='data:post.labels any (label  => label.name == "flower")'>
                    <h1>Flower!</h1>
                </b:if>

            </b:loop>
        </b:includable>
    </b:widget>
</b:section>

例如,如果我删除循环,并将其替换为:
<b:if cond='data:posts any (p  => p.title  != "bob")'>                  
    <h1>Post found</h1>           
</b:if>>

只找到一个帖子,当我有几个帖子时,没有一个标题是鲍勃!我试过将 lambda 运算符从 any 切换到过滤器而不做任何更改。

最佳答案

我的问题的解决方案

愚蠢的我,如果我希望能够使用循环,我需要指定一个循环:

<b:loop values='data:posts filter (p  => p.id  != 0)'  var='post'>                    
  <h1>Post found: <data:post.title/></h1>           
</b:loop>

如何使用 Blogger Lambda 运算符

对于来这里寻求帮助的人,我推荐以下文章,它非常全面地解释了如何使用 Lambda 表达式:http://www.bloggerever.com/2016/05/what-are-exactly-bloggers-lambda.html并基于 https://productforums.google.com/forum/#!topic/blogger/l3phi8bscGY .

本质上有 7 个 Lambda 运算符
  • 任何
  • 全部
  • 计数
  • 过滤器
  • map
  • 第一

  • 每个都可以在 if 或循环条件语句中使用。以下是一些未经测试的示例代码,可帮助您入门。

    任何 如果 Lambda 中的任何项目返回 true,则运算符将返回 true,因此,例如,如果帖子具有与其关联的标签 labela 或 labelb,则以下代码将返回 true:
      <b:if cond='data:post.labels any
                   (l  => l.name in {"labela","labelb"})'>
          ...Code here...
    </b:if>
    

    全部 如果同时有 labela 和 labelb 与之关联,则返回 true:
      <b:if cond='data:post.labels all  
                   (l  => l.name not in {"labela","labelb"})'>
          ...Code here...
    </b:if>
    

    如果它既没有 labela 也没有 labelb 与之关联,则返回 true :
      <b:if cond='data:post.labels all  
                   (l  => l.name not in {"labela","labelb"})'>
          ...Code here...
    </b:if>
    

    计数 将返回 0、1 或 2,具体取决于帖子是否既没有 labela 也没有 labelb 与之关联,或者只有 labela 或同时有 labela 和 labelb
      <b:if cond='data:post.labels count
                   (l  => l.name not in {"labela","labelb"})'>
          ...Code here...
    </b:if>
    

    过滤器 将返回一个数组并需要一个循环。下面的示例将打印出每个帖子的标题,除非它的 id 为 0(我不可能!)
    <b:loop values='data:posts filter (p  => p.id  != 0)'  var='post'>                    
        <h1>Post found: <data:post.title/></h1>           
    </b:loop>
    

    第一 像过滤器,但只会返回第一个匹配项。
    <b:loop values='data:posts first(p  => p.timestamp  == "4.2.09")'  var='post'>                    
        <h1>Post found: <data:post.title/></h1>           
    </b:loop>
    

    map 返回一个数组集,其中包含来自 Lambda 的每个结果。下面的代码将在 h1 标签中显示带有 >> 前缀的标签。
    <b:loop values='data:post.labels map (l=> ">>" + l.name)' var='label'>
         <h1><data:label/></h1>
    </b:loop>
    

    最后一点:链接到的文章表明 Lambda 可能仅适用于帖子、标签和评论元素。它当然适用于前两个,但我还没有尝试过评论。

    关于lambda - 如何使用 Google Blogger Lambda 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37436554/

    相关文章:

    c# - Linq 表达式转字符串

    java - 如何使用 Java 8 流和过滤器过滤嵌套循环?

    visualization - Blogger/Blogspot 中的 Google Visualization API 图表

    html - 如何在 <pre> 标签内转义 < 和 >

    c# - 拉皮条我的 LINQ : a learning exercise based upon another post

    java - 单次调用 Java 流后发生 IllegalStateException

    c# - LINQ lambda 表达式替换字符串中的多个字符?

    html - 如何在 blogspot 中进行 100% 布局?

    css - 如何禁用 blogger.com 网站中的动态 View 下拉列表?

    java - java可以用来写blogger widgets吗?