为什么我不能将=>应用于void?

问题描述

糖与map

一起使用
import sugar 

proc map2*[T,R](list: openArray[T]; cb: proc (x: T): R): seq[R] =
  for v in list: result.add(cb(v))
  result
  
echo @[1,2].map2((v) => v*v)

但不是与each一起使用,似乎与void有某种联系,是否也有办法使其与void一起使用?

import sugar 

proc each2*[T](list: openArray[T]; cb: proc (x: T): void): void =
  for v in list: cb(v)

@[1,2].each2((v) => echo v)

解决方法

我个人对sugar.=>不太幸运。这将满足您的要求,并且不再冗长:

proc each2*[T](list: openArray[T]; cb: proc (x: T): void): void =
  for v in list: cb(v)

@[1,2].each2(proc(v: auto) = echo v)

This RFC提议适当的lambda支持,这应该为我们提供一种简洁的方法来编写可在任何地方使用的匿名proc。