相关疑难解决方法(0)

我可以在Scala中省略哪些字符?

在Scala中,为什么我可以在下面的T m 0(而不是T.m(0))中省略点和大括号?

scala> object T { def m(i:Int) = 0 == i }
defined module T

scala> T m 0
res19: Boolean = true
Run Code Online (Sandbox Code Playgroud)

但为什么我不能n(0)在下面省略这些问题呢?

scala> def n(i:Int) = 0 == i
n: (Int)Boolean

scala> n 0
<console>:1: error: ';' expected but integer literal found.
       n 0
         ^
Run Code Online (Sandbox Code Playgroud)

syntax scala

23
推荐指数
1
解决办法
4591
查看次数

了解Scala块

我很难找到具体的答案,我所知道的是微不足道的.我想了解块如何在Scala中工作.我来自java/ruby​​背景,似乎scala有一种完全不同的使用块的方式.

以下代码来自Play!框架网站.我想了解Action在语义上是什么.是接受块的对象还是函数,或者两者都不接受.

object Application extends Controller {

  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }

}
Run Code Online (Sandbox Code Playgroud)

如果它是一个函数,也许它是以下的语法糖(在这种情况下scala如何在幕后传递块):

  def index = Action({
    Ok(views.html.index("Your new application is ready."))
  })
Run Code Online (Sandbox Code Playgroud)

或者它是一些我不知道的scala语法.

对Scala源代码的任何引用都将帮助我理解它在幕后的工作原理.

scala block playframework

20
推荐指数
2
解决办法
2797
查看次数

Scala点语法(或缺少)

当我遇到一段对我来说没有意义的代码时,我正在阅读精彩的" Scala编程"一书:

def above(that: Element): Element = {
    val this1 = this widen that.width
    val that1 = that widen this.width
    elem(this1.contents ++ that1.contents)
}
Run Code Online (Sandbox Code Playgroud)

注意第2和第3行:

val this1 = this widen that.width 
Run Code Online (Sandbox Code Playgroud)

似乎我应该能够用以下内容替换它:

val this1 = this.widen that.width
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译此更改时,它会给出以下错误:

错误:';' 预期,但'.' 找到.
val this1 = this.widen that.width ^

为什么这种语法不可接受?

java syntax scala

9
推荐指数
1
解决办法
2519
查看次数

Scala中有和没有()的函数参数

我正在玩有关Scala in Action book http://www.manning.com/raychaudhuri/的代码示例

引自https://github.com/nraychaudhuri/scalainaction/blob/master/chap01/LoopTill.scala

// Run with >scala LoopTill.scala  or
// run with the REPL in chap01/ via
// scala> :load LoopTill.scala

object LoopTillExample extends App {
  def loopTill(cond: => Boolean)(body: => Unit): Unit = {
    if (cond) { 
      body
      loopTill(cond)(body)     
    }
  }

  var i = 10   
  loopTill (i > 0) {     
     println(i)
     i -= 1   
  }   
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码cond: => Boolean是我困惑的地方.当我改变cond:() => Boolean它失败了.

有人可以解释一下我之间有什么不同

cond: => Boolean 
Run Code Online (Sandbox Code Playgroud)

cond:() => Boolean 
Run Code Online (Sandbox Code Playgroud)

它们不是都代表功能的参数吗?

scala

6
推荐指数
1
解决办法
138
查看次数

Scala中的隐式类

下面是Scala Implicit类的示例程序:

object Run {
   implicit class IntTimes(x: Int) {
      def times [A](f: =>A): Unit = {
         def loop(current: Int): Unit =

         if(current > 0){
            f
            loop(current - 1)
         }
         loop(x)
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

还有一个类称为" 4 times println("hello")"如下,但我无法理解" 4 times println("hello")"是什么意思?

object Demo {
   def main(args: Array[String]) {
      4 times println("hello")
   }
}
Run Code Online (Sandbox Code Playgroud)

scala

6
推荐指数
2
解决办法
3351
查看次数

Scala REPL:错误:';' 预期,但字符串文字发现

这个简单的教科书REPL有什么问题?

C:\Users\abc>scala
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_45).
Type in expressions to have them evaluated.
Type :help for more information.

scala> print "Hello"
<console>:1: error: ';' expected but string literal found.
       print "Hello"
             ^

scala>
Run Code Online (Sandbox Code Playgroud)

这应该打印"你好"

scala

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

调用不带'this'关键字的成员方法

在Scala中,是否可以调用成员方法而无需调用自身的实例?

例如,有这个类:

class Model {
    def action(value : String) = {
        // Do action
    }
}
Run Code Online (Sandbox Code Playgroud)

这个对象实现有效:

object MyModel extends Model {
    this action "doSomething"
}
Run Code Online (Sandbox Code Playgroud)

但我想做这样的事情:

object MyModel extends Model {
    action "doSomething"
}
Run Code Online (Sandbox Code Playgroud)

与Java属性文件一样,因为它是定义对象状态的一种巧妙方法.

我设法为以下内容定义了一个别名this:

def declare = this
Run Code Online (Sandbox Code Playgroud)

但是在调用成员方法之前必须使用一个单词也是同样的问题.

有没有选择这样做?

scala

2
推荐指数
1
解决办法
1092
查看次数

在定义Scala匿名函数时可以使用块吗?

我有这个方法:

def myMethod(value:File,x: (a:File) => Unit) = {
   // Some processing here
   // More processing
   x(value)
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以称之为:

myMethod(new File("c:/"),(x:File) => println(x))
Run Code Online (Sandbox Code Playgroud)

有没有办法用支架称它?就像是:

myMethod(new File("c:/"),{ (x:File) =>
     if(x.toString.endsWith(".txt")) {
         println x
     }
})
Run Code Online (Sandbox Code Playgroud)

或者我是否必须用另一种方法编写并将其传递给myMethod

scala anonymous-function

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

带有curried函数的Scala无点调用语法

注意:对一般问题的详细解答是在Stack Overflow问题中,什么是可以省略括号,点,大括号,=(函数)等的精确规则?.

以下作品:

scala> List(1,2,3) filter (_ > 1) reduceLeft(_ + _)
res65: Int = 5
Run Code Online (Sandbox Code Playgroud)

还有以下内容:

scala> List(1,2,3).filter(_ > 1).foldLeft(0)(_ + _)
res67: Int = 5
Run Code Online (Sandbox Code Playgroud)

但不是这个sytax:

scala> List(1,2,3) filter (_ > 1) foldLeft(0)(_ + _)
<console>:10: error: 0 of type Int(0) does not take parameters
       List(1,2,3) filter (_ > 1) foldLeft(0)(_ + _)
                                        ^
Run Code Online (Sandbox Code Playgroud)

什么是建议的修复?

syntax scala

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

Scala语法错误?

我在scala语法中遇到了一些我认为是bug/no-syntax-sense的东西,但我更喜欢在报告之后将其发布在此处,因为我可能错了.

控制器类:

package some

import java.awt.event.ActionListener
import java.awt.event.ActionEvent

class ItemController extends ActionListener {

  val NEW_ITEM = "new item"
  val UPDATE_ITEM = "update item"

  private val newItem = new ItemNew

  override def actionPerformed(e: ActionEvent) = {

  }

  def create(view: String) = {

    view match {
      case NEW_ITEM => {
        newItem eraseForm //Here eclipse says "Unit does not take parameters".
        newItem setVisible true
      }

      case UPDATE_ITEM =>
    }

  }

}
Run Code Online (Sandbox Code Playgroud)

视图类

  package some

  import scala.collection.mutable.HashMap
  import javax.swing.JPanel
  import java.awt.GridLayout
  import javax.swing.JFrame
  import …
Run Code Online (Sandbox Code Playgroud)

syntax scala

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

选项[Map [String,String]]可以很奇怪地得到一个值

我发现Option[Map[String, String]]奇怪的作品是这样的:

 scala> val fileInfo: Option[Map[String, String]] = Some(Map( "type" -> "hoge" ))
 fileInfo: Option[Map[String,String]] = Some(Map(type -> hoge))

 scala> fileInfo.get("type")
 res1: String = hoge
Run Code Online (Sandbox Code Playgroud)

我认为Option"get"方法不会引起任何争论,所以这对我来说非常奇怪.它为什么有效?它是隐式转换还是错误?我想确定它是如何工作的.

我的规格是:

  • Scala版本2.9.2
  • Java 1.6.0_43

scala scala-collections

0
推荐指数
1
解决办法
668
查看次数

如何使用Scala subiterators"it filter p"

在Scala doc中,trait Iterator中的Operation具有Subiterators部分.你怎么用它们?

例如,it filter p描述为"迭代器返回it满足条件的所有元素p.

scala> val list1 = List(1,2,3,4,5,6)
list1: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> list1 filter (_ > 3)
res17: List[Int] = List(4, 5, 6)

scala> list1.filter(_ > 3)
res18: List[Int] = List(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,您可以使用list.filter(condition)或者list filter (condition) 有人可以提供更多使用这些操作的示例,并解释两种语法格式之间的区别.

iterator scala list

0
推荐指数
1
解决办法
45
查看次数