给定以下Scala代码:
def compute2(maybeFoo: Option[Foo]): Option[Int] =
maybeFoo.flatMap { foo =>
foo.bar.flatMap { bar =>
bar.baz.map { baz =>
baz.compute
}
}
}
然后翻译成这样以便理解:
def compute2(maybeFoo: Option[Foo]): Option[Int] =
for {
foo <- maybeFoo
bar <- foo.bar
baz <- bar.baz
} yield baz.compute
我的问题是如何在Clojure中将这个map/flatMap转换成一个便于理解的?
假设:
mapcat
)来表示它,而不是algo.monads
/Fluokitten
库。但是如果这是最好的方法(我愿意学习),那么就使用它。您可能不会在Clojure中使用Option
,但是如果对象位于集合中,则类似如下的方法应该可以工作:
(let [maybe-foo [{:bar [{:baz [(fn [] 42)]}]}]]
(for [foo maybe-foo
bar (:bar foo)
baz (:baz bar)]
(baz)))
;=> '(42)
(let [maybe-foo [{:bar nil}]]
(for [foo maybe-foo
bar (:bar foo)
baz (:baz bar)]
(baz)))
;=> '()
(let [maybe-foo nil]
(for [foo maybe-foo
bar (:bar foo)
baz (:baz bar)]
(baz)))
;=> '()
问题内容: 我有一个包含两个类的元素,一个叫做“ rotate”,它将旋转元素360度,另一个叫做“ doublesize”,它将元素放大两倍于其正常大小: 我猜这是行不通的,因为这些类会覆盖彼此的属性? 我知道我可以很容易地在一条CSS规则中做到这一点,例如: 但是我希望能够在可能的情况下分别应用每个类。 问题答案: 我猜这是行不通的,因为这些类会覆盖彼此的属性? 正确。作为级联工作方式的副作用
这是我的JSON回复 但这就是未来的样子 正如您在第一个代码片段中看到的,“状态”为1表示没有异常,而在第二个代码片段中,“状态”为2表示更改,因此数组已填充。 我如何解析这两个??
问题内容: 将a转换为a 的最佳方法是什么?只是迭代所有值并将它们插入列表中,还是我忽略了某些内容? 问题答案: 假设:
如何转换来自JavaScript的日期格式: 这些格式不起作用 日期要追溯到1969年 有什么见解吗?