我只是ST
在scalaz中玩了一下并且到了关键点,在那里我想使用可遍历类型的内容来修改我的内容STRef
.在Haskell中我可以这样做(取自Haskell wiki):
sumST :: Num a => [a] -> a
sumST xs = runST $ do
n <- newSTRef 0
forM_ xs $ \x -> do
modifySTRef n (+x)
readSTRef n
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法找到forM_
scalaz中的等价物.所以问题是,我怎么能用scalaz做到这一点?
我目前正在玩一些宏,但也许这是一个坏主意,但这是我的问题:
我有以下宏:
def using[A <: { def close(): Unit }, B](resource: A)(f: A => B) = macro usingImpl[A, B]
def usingImpl[A <: { def close(): Unit }, B](c: Context)(resource: c.Expr[A])(f: c.Expr[A => B]): c.Expr[B] = {
import c.universe._
f.tree match {
case Function(params, body) =>
//val ValDef(modifiers, name, tpt, _) = params.head
c.Expr[B](
Block(
List(
//ValDef(modifiers, name, tpt, resource.tree)
ValDef(params.head.symbol, resource.tree)
),
body
)
)
case _: Select =>
reify {
val res = resource.splice
try {
f.splice(res)
} finally …
Run Code Online (Sandbox Code Playgroud) 我正在学习scala.我正在读Scala的不耐烦.
1.)
逆天
有区别吗?
for (i <- 0 to 10)if (i % 2 == 0) println(i)
for (i <- 0 to 10 if i % 2 == 0) println(i)
Run Code Online (Sandbox Code Playgroud)
2.)
我总是看到以下符号,=>
但他们从不解释它的作用.
有时我认为这是一个演员,但它是完全不同的东西,我希望你能搞清楚.