Scala语言中的scheme cond
scala 有相当于scheme 的 cond 吗?
Does scala have an equivalent to scheme's cond?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
scala 有相当于scheme 的 cond 吗?
Does scala have an equivalent to scheme's cond?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
我猜您正在寻找
match
(或者只是简单地if/else if/else
)。I guess you're looking for
match
(or just simplyif/else if/else
).前两个 case 语句显示基于类型的模式匹配。第三个展示了如何使用提取器将数据分解为组成部分并将这些部分分配给变量。第三个显示了一个可变模式匹配,它将匹配任何内容。未显示的是 _ 情况:
它与变量模式匹配一样,匹配任何内容,但不将匹配的对象绑定到变量。
顶部的案例类是用于创建提取器以及类本身的 Scala 简写。
The first two case statements show type based pattern matching. The third shows the use of an Extractor to break data down into constituent parts and to assign those parts to variables. The third shows a variable pattern match which will match anything. Not shown is the _ case:
Which like the variable pattern match, matches anything, but does not bind the matched object to a variable.
The case class at the top is Scala shorthand for creating an extractor as well as the class itself.
当然,
match
和if
的作用都与cond
完全相同。一种可能性是这样做:这个对象接受一些 Iterable 的东西,其中每个项目都是一对返回 Boolean 的函数和一个返回 Any 的函数。它尝试查找第一个函数返回 true 的项目,如果找到则停止查找,对找到的项目调用第二个函数并返回该函数的结果(如果没有找到,则返回 ())。
示例:
ETA:是的,我知道它很难看,但它有效。
Of course, neither
match
norif
does exactly the same thing ascond
. One possibility is to do like this:This object accepts something Iterable where each item is a pair of a function returning Boolean and a function returning Any. It tries to find an item whose first function returns true, stops looking if it finds one, calls the second function on a found item and returns the result of that function (or () if none was found).
Examples:
ETA: Yes, I know it is ugly, but it works.
最直接的翻译是使用模式保护,尽管它需要一些样板。模式保护仅在
case
模式中工作,而case
仅在match
中工作(除非我们正在编写PartialFunction
代码>)。我们可以通过将单位值与简单的
case
进行匹配
来满足这些条件:The most straightforward translation is to use pattern guards, although it requires some boilerplate. Pattern guards only work in a
case
pattern, andcase
only works in amatch
(unless we're writing aPartialFunction
).We can satisfy these conditions by
match
ing a unit value against trivialcase
s: