了解Scala块
发布时间:2020-12-16 09:37:06 所属栏目:安全 来源:网络整理
导读:我很难找到具体的答案,我知道的是一些微不足道的事情。我想了解块在Scala中的工作原理。我来自一个java / ruby??背景,似乎scala有一个完全不同的方式使用块。 以下代码来自Play! Framework website.我想了解Action在语义上如何。它是一个接受块的对象或函
我很难找到具体的答案,我知道的是一些微不足道的事情。我想了解块在Scala中的工作原理。我来自一个java / ruby??背景,似乎scala有一个完全不同的方式使用块。
以下代码来自Play! Framework website.我想了解Action在语义上如何。它是一个接受块的对象或函数,也可能不是。 object Application extends Controller { def index = Action { Ok(views.html.index("Your new application is ready.")) } } 如果它是一个功能,或许这是下面的语法糖(在这种情况下scala如何传递给幕后的块): def index = Action({ Ok(views.html.index("Your new application is ready.")) }) 或者是我不知道的一些scala语法。 任何对Scala源代码的引用将帮助我了解这是如何在幕后工作的。 解决方法
你最好将scala块作为java匿名类(如Guava功能)而不是ruby块。实际上,如果反编译scala代码,你会看到或多或少的代码(
taken from Guava examples):
Function<String,Integer> lengthFunction = new Function<String,Integer>() { public Integer apply(String string) { return string.length(); } }; 不同的是,scala提供了很多语法糖,并允许您将以上代码写为: val lengthFunction = { string: String => string.length } 至于一个具体的动作例子: def index = Action({ Ok(views.html.index("Your new application is ready.")) }) 这里Action可能是具有apply方法的对象。另一个scala糖:语言允许你写Foo(bar),意思是Foo.apply(bar)。接下来,you can drop round braces when your call isn’t ambiguous,所以是的,它实际上是一个被称为如下的方法: def index = Action({ Ok(views.html.index("Your new application is ready.")) }) 并有像这样的签名: object Action { def apply(block: => Result) = ??? } 如@yan所说,这是scala的方式说嘿,我是一个功能,接受另一个产生结果的功能 desugared调用将看起来像 def index = Action.apply(new AbstractFunction[Result] { def apply() = Ok.apply(views.html.index.apply("...")) }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angular – 如何从mat-table材料设计中删除mat-row
- WebServices SOAP简单介绍
- 如何使用bash从单独的文件中粘贴列?
- 变量 – 将textarea的Angular2 maxLength作为变量
- Bootstrap进度条学习使用
- 创建带WebService功能的Flex Web工程
- user-interface – 如何将持久数据结构“绑定”到Scala中的
- 免费的响应式bootstrap管理员后台界面主题 - Charisma
- Using existing Bootstrap themes in Liferay (Part I).
- angular – ng new hello错误:路径“/app/app.module.ts”