我目前正在进入Scala,并且想知道在调用以':'结尾的方法时使用对象表示法的区别.由于以':'结尾的方法名称通常会产生右侧关联性,当使用对象表示法调用此类方法时,这似乎会发生变化.
例:
scala> 3 +: List(1,2)
res1: List[Int] = List(3, 1, 2)
scala> List(1,2) +: 3 // does not compile due to right side associativity
scala> (List(1,2)).+:(3)
res2: List[Int] = List( 3, 1, 2)
Run Code Online (Sandbox Code Playgroud)
现在我不明白为什么通过使用对象表示法来禁用右关联性功能.有人可以解释这个或链接到这个问题的文档?
我想创建一个基于控制器的 JavaFX GUI,由多个控制器组成。
我无法完成的任务是将参数从一个场景传递到另一个场景并返回。
或者换句话说:MainController 加载 SubController 的 fxml,将一个对象传递给 SubController,切换场景。不应有两个敞开的窗户。完成工作后,SubController 应将场景切换回 MainController 并将一些对象传回。这是我失败的地方。
这个问题与这个问题非常相似,但仍然没有答案。传递参数 JavaFX FXML 评论中也提到了:
“当您将参数从第一个控制器传递到第二个控制器但如何将参数从第二个控制器传递到第一个控制器时,这项工作是在加载 first.fxml 之后。
– Xlint Xms 2017 年 9 月 18 日 23:15"
我在该线程的最佳答案中使用了第一种方法。
有没有人知道如何在没有外部库的情况下实现这一目标?
通过较早的考试,我复制了这段代码,并试图使其正常工作。
rems :: Integer -> [(Integer ,Integer )]
rems n = [(i, n `mod` i) | i <- [2 ..(n?1)]]
Run Code Online (Sandbox Code Playgroud)
现在使用类型声明或不使用类型声明,都会出现错误:
Variable not in scope: (?) :: Integer -> Integer -> Integer
ghc version 8.6.3
Run Code Online (Sandbox Code Playgroud)
我能够通过在where子句中计算n-1来解决此问题,但并没有真正弄清为什么这是解决方法。我当然知道Haskell中的Integer。
rems n = [(i, n `mod` i) | i <- [2 ..j] ]
where j = n-1
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么这种看似无效的变化不能解决错误,还有其他方法吗?