小编Ant*_*bbs的帖子

什么时候可以省略括号,点,大括号,=(函数)等的精确规则?

什么时候可以省略(省略)括号,圆点,大括号,=(函数)等的精确规则?

例如,

(service.findAllPresentations.get.first.votes.size) must be equalTo(2).
Run Code Online (Sandbox Code Playgroud)
  • service 是我的对象
  • def findAllPresentations: Option[List[Presentation]]
  • votes 回报 List[Vote]
  • 必须有规格的两种功能

为什么我不能去:

(service findAllPresentations get first votes size) must be equalTo(2)
Run Code Online (Sandbox Code Playgroud)

编译器错误是:

"类型为Option [List [com.sharca.Presentation]]的RestServicesSpecTest.this.service.findAllPresentations不带参数"

为什么它认为我试图传递一个参数?为什么我必须为每个方法调用使用点?

为什么必须(service.findAllPresentations get first votes size)相等Too(2)导致:

"没找到:价值第一"

然而,"必须等于2" (service.findAllPresentations.get.first.votes.size)必须等于2,即方法链是否正常? - 对象链链链接.

我查看了Scala的书籍和网站,无法找到全面的解释.

事实上,正如Rob H在Stack Overflow问题中解释的那样,我可以在Scala中省略哪些字符?,这是省略'.'的唯一有效用例.是用于"操作数运算符操作数"样式操作,而不是用于方法链接?

syntax scala

101
推荐指数
3
解决办法
2万
查看次数

最好的Scala模仿Groovy的安全解除引用运算符(?.)?

我想知道什么是最好的Scala模仿Groovy的安全解除引用运算符(?.),或者至少是一些接近的替代方案?

我在Daniel Spiewak的博客上讨论过它,但是想把它打开到StackOverFlow ......

为了每个人的时间,这是丹尼尔的最初回应,我的反击,以及他的第二个回应:

@Antony

实际上,我先看了那个.或者更确切地说,我试图从Ruby土地上复制Ragenwald和"操作员".问题是,如果没有代理,这有点困难.考虑以下表达式(使用Ruby的andand,但它与Groovy的运算符相同):

test.andand().doSomething的()

我可以从Any =>某种类型实现andand()方法创建隐式转换,但这就是魔术停止的地方.无论值是否为null,doSomething()方法仍将执行.由于它必须以类型安全的方式在某个目标上执行,这将需要实现字节码代理,这将是片状和奇怪的(注释,最终方法,构造函数等的问题).

更好的选择是回归到两者的灵感来源,以及Groovy的安全解除引用运算符:monadic map操作.以下是一些使用Option实现模式的Scala语法:

val something:Option [String] = ... //可能是Some(...)或None

val length = something.map(_.length)

在此之后,length要么是Some(str.length)(其中str是Option中包含的String对象),要么是None.这正是安全解除引用操作符的工作原理,除了它使用null而不是类型安全的monad.

如上所述,我们可以从某种类型T => Option [T]定义隐式转换,然后以这种方式映射,但是某些类型已经定义了映射,因此它不会非常有用.或者,我可以实现类似于map但具有单独名称的东西,但无论如何实现它,它将依赖于高阶函数而不是简单的链式调用.它似乎只是静态类型语言的本质(如果有人能解决这个问题,请随时纠正我).

Daniel Spiewak,2008年7月7日星期一下午1:42

我的第二个问题:

感谢Daniel对此的回应?我想我错过了!我想我明白你的建议是什么,但是假设你无法控制来源,那么这样的事情是怎样的:

company?.getContactPerson?.getContactDetails?.getAddress?.getCity
Run Code Online (Sandbox Code Playgroud)

假设它是一个java bean,你不能进入并将返回值更改为Something [T] - 我们可以在那里做什么?

Antony Stubbs 2009年7月21日星期二晚上8:07哦天哪 - 重新阅读那就是你提出从T到Option [T]的隐式转换的权利吗?但是你还能像这样把它连在一起吗?你还需要地图吗?嗯....

var city = company.map(_.getContactPerson.map(_.getContactDetails.map(_.getAddress.map(_.getCity))))
Run Code Online (Sandbox Code Playgroud)

Antony Stubbs于2009年7月21日星期二晚上8:10发布

他的第二回应:

@Antony

在公司的情况下,我们真的无法做很多事情吗?.getContactPerson等等......即使假设这是有效的Scala语法,我们仍然需要一些方法来阻止链中的后续调用.如果我们不使用函数值,这是不可能的.因此,像地图这样的东西确实是唯一的选择.

对Option的隐式转换不会很糟糕,但是通过隐含事物,我们会绕过对类型系统的一些保护.做这种事情的最好方法是使用与Option一致的for-comprehension.我们可以做map和flatMap,但它的魔法语法更好:

 for {
   c < - company
   person <- c.getContactPerson   
   details <- person.getContactDetails
   address <- details.getAddress 
  } yield address.getCity …
Run Code Online (Sandbox Code Playgroud)

groovy scala

25
推荐指数
4
解决办法
6606
查看次数

水平(或在网格中)而不是垂直布局多个 SwiftUI 预览?

在之前渲染多个 SwiftUI 时,它们总是在垂直堆栈中渲染。我想将它们水平或理想地放在网格上。因为我的屏幕上有更多的水平空间。

必须在多个预览之间上下滚动是没有效率的,尤其是当您有两个以上的预览时。

任何人都知道解决方法,或者是否可能?

更新:例如,正如您在屏幕截图中看到的,我希望水平并排显示这两个预览。

Xcode 12.0 测试版 (12A6159)

在此处输入图片说明

xcode swift swiftui

15
推荐指数
1
解决办法
535
查看次数

ScrollView 内的 GeometryReader 会折叠 GeometryReader,无论子尺寸如何

我正在尝试创建一个包含绘图的子视图,我希望该绘图的大小与父容器的一部分成比例。

除非将其放入层次结构上方的滚动视图中,否则效果很好。

从屏幕截图中可以看出,堆栈内部的声音正如预期的那样最大。但是,当您放入滚动视图时,几何读取器的大小会折叠到接近零,并且其子级会溢出其边界。就好像它在不同的 Z 索引上渲染其子级一样。事实上,如果您从几何渲染内容中删除包装 VStack,它实际上不会像包装在 ZStack 中一样布局其所有子级。

编辑: 要明确的是:ScrollView 不属于组件。该组件不应该知道它是否在 ScrollView 中 - 它只是一个可怜的无助组件,被扔来扔去。这就是为什么我将 ScrollView 放入预览代码中,而不是组件中。

我尝试过各种固定尺寸、男士、杂志和理想的组合。我能找到的唯一解决方法是这个hacky 解决方案- 靠近底部的问题的编辑部分,其中几何读取器报告的宽度通过变通方法捕获到状态变量中,然后重新用于设置 a 的帧大小兄弟视图。

请注意,我是一个完全的初学者。滚动视图和几何阅读器之间似乎存在一些交互,超出了我目前的理解。

似乎是一个令人困惑的话题

import SwiftUI

struct ScrollViewGeoReader: View {
    var body: some View {
        GeometryReader{ g in
            VStack{
                let width = g.size.width
                Circle().frame(width: width/3, height: width/3, alignment: .center)
                Text("inside geo")
                Text("inside geo")
                Text("inside geo \(width)")
                Text("inside geo")
                Text("inside geo")
            }
            .border(Color.green, width: 2)
        }
        .border(Color.red, width: 3)
    }
}

struct ScrollViewGeoReader_Previews: PreviewProvider { …
Run Code Online (Sandbox Code Playgroud)

swiftui

11
推荐指数
1
解决办法
2651
查看次数

现在有了GWT 2,与wicket相比有哪些优势呢?

除了Wicket简单性的论点(即Wicket是一个更简单的系统IMHO)和GWT在客户端的响应(GWT的客户端状态和JavaScript - 可能是复杂的客户端代码)和GWT更大的扩展潜力,有什么争论使用GWT而不是Wicket?

就个人而言,我做了很多Wicket开发,但很久以前只是快速浏览了GWT.

gwt wicket web-frameworks

8
推荐指数
3
解决办法
5442
查看次数

使用 Spring WebClient 发出多个请求

所以我的目标是使用 WebClient 发出多个并发请求,等到它们全部完成,然后合并结果。这是我到目前为止所拥有的:

...

Flux<ServerResponse> feedResponses = request
        .bodyToMono(AddFeedRequestDto.class)
        .map(AddFeedRequestDto::getFeeds) // Returns a list of RSS feed URLs
        .map(this::getServerResponsesFromUrls) // Returns a list of Mono<Feed>
        .map(Flux::merge) // Wait til all requests are completed
        // Not sure where to go from here

...

/** Related methods: **/

private List<Mono<Feed>> getServerResponsesFromUrls(List<String> feedUrls) {
    List<Mono<Feed>> feedResponses = new ArrayList<>();
    feedUrls.forEach(feedUrl -> feedResponses.add(getFeedResponse(feedUrl)));
    return feedResponses;
}

public Mono<Feed> getFeedResponse(final String url) {
    return webClient
            .get()
            .uri(url)
            .retrieve()
            .bodyToMono(String.class) // Ideally, we should be able …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot project-reactor spring-webflux

4
推荐指数
1
解决办法
6870
查看次数