Как передать метод в качестве параметра и вернуть цикл в Scala? - PullRequest
0 голосов
/ 21 февраля 2019

Проблема с моим кодом связана с методом "makeSomeNoise".Я хочу передать метод "animals" в "makeSomeNoise", потому что я хочу передать список животных в качестве параметра и затем вернуть список строк, содержащих шумы каждого животного (класса) во входных данных.

abstract class Animal(name: String) {
def sound(): String
override def toString: Animal
}

class Cat(var name: String)
extends Animal(name)
{
override def sound() = {
"meow"
}
}

class Dog(var name: String)
extends Animal(name){
override def sound() = {
    "woof"
}
}

object Park{
def animals() = {
    val a =List(new Dog("Snoopy"), new Dog("Finn"), new Cat("Garfield"),new Cat("Morris"))
    a
}
def makeSomeNoise(Park.animals()) = {
    for (i<-animals){
    val b = List() :+ i.sound
    b
    }
}
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Не уверен, почему вы используете def для более естественных значений val.

Получается ли это на том, что вы ищете?

abstract class Animal(name: String) {
  def sound(): String
  override def toString = "Animal"
}

class Cat(var name: String) extends Animal(name) {
  override def sound() = "meow"
}

class Dog(var name: String) extends Animal(name) {
  override def sound() = "woof"
}

object Park{
  def animals() =
    List(new Dog("Snoopy"), new Dog("Finn"), new Cat("Garfield"),new Cat("Morris"))

  def makeSomeNoise(lst :List[Animal]) :List[String] = lst.map(_.sound())
}

Park.makeSomeNoise(Park.animals())  
//res0: List[String] = List(woof, woof, meow, meow)
0 голосов
/ 21 февраля 2019

Возможно, вы захотите сделать его параметром по умолчанию и использовать карту для итерации, и он вернет тип, определенный вашим результатом карты.

def makeSomeNoise(animals: List[Animal] = Park.animals()) = {
    animals.map(animal => animal.sound)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...