【问题标题】:Mimicking C# out and ref in Scala -- ready to use features?在 Scala 中模仿 C# 和 ref —— 准备好使用功能了吗?
【发布时间】:2012-02-08 06:13:08
【问题描述】:

在有限的意义上,自己编写out 和ref 类是很容易的,但我的问题不是如何去做——而是是否有一些功能(或类)可以使用?

我找到的最接近的东西是 Reference trait(但它是一个 trait)。

我需要 那些,而不是元组,不是 Option,也不是 Either 作为纯结果,因为只有 ref/out 才能使链接 ifs 变得优雅。

【问题讨论】:

  • 您能否提供一些示例代码来说明您要归档的链接?也许另一个问题的答案会有所帮助:stackoverflow.com/questions/6896118/…
  • 最简单的例子是if (foo(ref/out bar)) return bar。非常感谢您提供的链接,我认为我不会使用 setter,而是使用包装器,但无论如何这是有趣的作品。 +1

标签: scala ref out


【解决方案1】:

不,Scala 支持按值或按名称传递参数。通过引用传递参数实际上很难在 JVM 中正确完成,这可能是流行的 JVM 语言都没有它的原因之一。此外,out 和 ref 参数鼓励通过副作用进行编程,这是 Scala 在设计时试图尽可能避免的。

至于 if 的链接,有多种方法可以实现类似 Scala 中的某些效果。 “匹配”表达式是最明显的,您也可以使用 Option 或 Either 查看一元组合。

【讨论】:

  • 嗯,“匹配”?您将如何使用它来模仿 ref/out?
  • 它不会直接模仿 ref 或 out,而是允许构造既测试条件又绑定一个或多个变量。我假设您正在尝试进行条件检查,该检查还绑定了适当的变量以在条件主体中使用,假设条件已通过。这种解构测试是模式匹配的完美之选。要在模式匹配中包含任意逻辑,请查看 gaurds(用于简单情况)或提取器(用于全功能)。
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2020-07-30
  • 2015-04-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多