小编fil*_*500的帖子

为什么OCaml中没有函数头?

在某些编程语言中,尤其是在C语言中,存在具有函数声明的头文件.这些函数"标题"位于代码之前,并且在具有相互递归的情况下是必需的.当函数头放在头文件中时,它们还有助于链接多个C文件一起编译的情况.

我对C文件中函数头的理解是它们有助于编译,因为它们定义函数的类型,如果它在定义之前被调用.如果这是错误的,我会很高兴能够得到纠正和更好的信息,但这是我对它的理解.

所以我不明白,为什么其他语言 - 在这种情况下我单挑OCaml - 没有功能标题.在OCaml中,存在具有签名的模块,但是签名不允许您的函数实例化是相互递归的,即使给出了类型.为了在OCaml中进行相互递归,你需要使用"和"关键字,或者在另一个函数中本地定义一个函数(据我所知).

(* version 1 *)
let rec firstfun = function
  | 0 -> 1
  | x -> secondfun (x - 1)
and secondfun = function
  | 0 -> 1
  | x -> firstfun x

(* version 2 *)
let rec firstfun = function
  | 0 -> 1
  | x -> 
       let rec secondfun = function
         |0 -> 1
         | x -> firstfun x in
       secondfun (x - 1)
Run Code Online (Sandbox Code Playgroud)

那么为什么会这样呢?它与多态性有关吗?有没有我不考虑的编译瓶颈?

c ocaml programming-languages mutual-recursion

6
推荐指数
2
解决办法
403
查看次数

使用 CDK 的跨账户 SNS Lambda 订阅

我有 2 个 AWS CDK 应用程序在单独的 AWS 账户中运行,我正在尝试添加 CDK 以在一个 AWS 账户中获取 lambda 以订阅另一个 AWS 账户中的通知。

我尝试在 lambda 帐户中添加订阅,但这不起作用,因为 SNS 帐户未授予权限。

SNS账号中的CDK:

val myTopic = Topic(this, "my-topic-id", TopicProps.builder()
            .displayName("topicName")
            .topicName("topicName")
            .build())
Run Code Online (Sandbox Code Playgroud)

Lambda 账户中的 CDK:

val myLambda = Function(...)

val crossAccountTopic = Topic.fromTopicArn(this, "topic-id", "arn:aws:sns:<region>:<accountId>:topicName")

crossAccountTopic.addSubscription(LambdaSubscription(myLambda))
Run Code Online (Sandbox Code Playgroud)

有没有人尝试过这样的事情?有没有办法完全通过更改两个帐户中的 CDK 来授予访问权限?还是需要手动操作?可能有一种方法可以通过 IAM 角色授予访问权限来实现此目的,因此我将对此进行进一步调查。

amazon-sns aws-cdk

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

如何将 API Gateway 指向 CDK 中的 lambda 别名?

使用 CDK 将 ApiGateway 连接到 lambda,我们首先创建一个 RestApi(),然后创建一个 LambdaIntegration 将 Apigateway 连接到 lambda。使用 lambda 别名时如何执行此操作?

如何将 ApiGateway 指向特定的 Lambda 别名解释了如何在没有 CDK 的情况下将 ApiG 连接到 Lambda 别名。如何将其转换为 CDK?

我们的目标是为与 API Gateway 一起使用的 lambda 添加预配置并发和自动缩放。

amazon-web-services aws-lambda aws-api-gateway aws-cdk

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