小编Dar*_*eth的帖子

如何使用 Trait 实现迭代器

我有一个名为 Library 的结构,它有一个字符串向量(标题)。我为此实现了一个迭代器。这是我的代码。

#[derive(Debug, Clone)]
struct Library {
    books: Vec<String>
}

impl Iterator for Library {
    fn next(&mut self) -> Option<Self::Item> {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试使用特征来实现迭代器,如下所示:

fn foo(x: Vec<u32>) -> impl Iterator<Item=u32> {
    //Unsure if correct method
    fn next() -> Option<...> {
       x.into_iter()....

    }
}
Run Code Online (Sandbox Code Playgroud)

但我不确定在这种情况下如何进行。我是否只需再次定义 next() 方法?根据其他资源,情况似乎并非如此。这是为什么?迭代器(正在返回)不应该有 next() 方法吗?

以这种方式实现迭代器的一般方法是什么?

iterator traits rust

4
推荐指数
1
解决办法
1871
查看次数

如何将项目递归添加到列表?

目前,我正在研究一个问题。给我一个列表,该列表的元素可以包含其他列表,列表列表或整数。例如,我可能会收到:

[[[[], 1, []], 2, [[], 3, []]], 4, [[[], 5, []], 6, [[], 7, [[], 9, []]]]]
Run Code Online (Sandbox Code Playgroud)

我的目标是解析数组,并且仅将整数附加到新列表中。到目前为止,这是我所做的:

def fun(a):
    if a == []:
        return None
    elif type(a) == int:
        print("Found a digit: ", a)
        return a
    for i in a:
        fun(i)
Run Code Online (Sandbox Code Playgroud)

当前,此函数以递归方式遍历列表并成功找到每个整数。现在,我遇到了这些整数附加到新列表,然后在最后返回该列表的问题。输出应如下所示:

[1,2,3,4,5,6,7,9]
Run Code Online (Sandbox Code Playgroud)

有指针吗?

python arrays recursion list

3
推荐指数
1
解决办法
49
查看次数

GmailAPI:“向 Cloud PubSub 项目/[project-id]/topics/[topic-id] 发送测试消息时出错:用户无权执行此操作。”?

我正在使用 Gmail API,并尝试使用 Python 3.9 设置推送通知。当我尝试在 Gmail 收件箱上调用 watch() 时,出现错误,即使我已遵循针对类似问题给出的所有建议。错误如下:

"Error sending test message to Cloud PubSub projects/[project-id]/topics/[topic-id] : User not authorized to perform this action."


到目前为止,我已经做了以下事情:

  • 创建主题
  • 创建订阅
  • 手动发送和接收消息
  • 创建一个服务帐户,具有“所有者”和“Cloud Pub/Sub 服务代理”权限
  • 对于该主题,将服务帐户设置为所有者
  • 对于订阅,将服务帐户设置为所有者

就代码而言,我只是添加到Google 提供的Python Quickstart 文件( https://developers.google.com/gmail/api/quickstart/python )中。这是我添加的内容:

from __future__ import print_function
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials

# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']

def main():
    """Shows basic …
Run Code Online (Sandbox Code Playgroud)

python gmail push-notification gmail-api google-cloud-pubsub

2
推荐指数
1
解决办法
723
查看次数

C#、Moq、单元测试:如何创建从另一个类继承的对象?

我的类/接口设置如下:

房间.cs

//import statements

namespace namespace1
{
   internal class Room: Apartment
   {
      // constructor
      public Room(Furniture furniture) : base(furniture)
      {
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

公寓.cs

// import statements

namespace namespace2
{
   public abstract class Apartment: Building
   {
      private int numChairs = 0;

      // constructor
      protected Apartment(IFurniture furniture) : base(IFurniture furniture)
      {
         this.numChairs = furniture.chairs.Length;
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

建筑.cs

// import statements

namespace namespace3
{
   public abstract class Building
   {
      // constructor
      protected Building(IFurniture furniture)
      {
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个 Room 对象,其中包含一个模拟的 …

c# unit-testing dependency-injection moq mocking

1
推荐指数
1
解决办法
60
查看次数

如何从1 .... n生成自然数列表?

我目前正在尝试在函数内部生成列表。用户将传入一个参数,该参数将是Int。该函数的工作是生成一个列表,从开始1,一直到n。所以列表看起来像

[1....n]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我所做的是:

iterate (+1) 1
Run Code Online (Sandbox Code Playgroud)

尽管这提供了正确的模式,但它会永远持续下去。我怎么能停在n?另外,我如何能够'1'在列表的末尾附加这样的内容:

[1...n,1]
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming function list

0
推荐指数
1
解决办法
92
查看次数

在函数内部使用变量

假设我有一个称为“ Coord”的数据类型,其定义如下:

type Coord a = [(Int, Int)]
Run Code Online (Sandbox Code Playgroud)

我想创建一个类型为“ Coord”的变量以在下面的函数中使用。该函数接受Coord类型的变量,并将列表中每个项目的x坐标乘以2。然后将这些新坐标中的每一个存储在NEW Coord变量中。我不确定如何创建/声明/使用我打算返回的新变量。

foo :: (Eq a) => Coord a -> Coord a
Run Code Online (Sandbox Code Playgroud)

variables haskell functional-programming function

-2
推荐指数
1
解决办法
77
查看次数