Java Scala分裂码

Java Scala分裂码,java,scala,oop,Java,Scala,Oop,我正在为一组给定的代码设计一种特定于领域的语言。 我有一个带有以下代码和导入的ExampleMList对象文件 package fr.univ_lille.cristal.emeraude.n2s3.apps import fr.univ_lille.cristal.emeraude.n2s3.core.ConnectionIndex import fr.univ_lille.cristal.emeraude.n2s3.core.actors.Config import fr.univ_lill

我正在为一组给定的代码设计一种特定于领域的语言。 我有一个带有以下代码和导入的ExampleMList对象文件

package fr.univ_lille.cristal.emeraude.n2s3.apps
import fr.univ_lille.cristal.emeraude.n2s3.core.ConnectionIndex
import fr.univ_lille.cristal.emeraude.n2s3.core.actors.Config
import fr.univ_lille.cristal.emeraude.n2s3.core.models.properties.MembranePotentialThreshold
import fr.univ_lille.cristal.emeraude.n2s3.features.builder.N2S3
import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types.FullConnection
import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._
import fr.univ_lille.cristal.emeraude.n2s3.features.logging.graph.{SynapticWeightSelectGraph, SynapticWeightSelectGraphRef}
import fr.univ_lille.cristal.emeraude.n2s3.models.neurons.LIF
import fr.univ_lille.cristal.emeraude.n2s3.models.synapses.{InhibitorySynapse, QBGParameters, SimplifiedSTDP}
import fr.univ_lille.cristal.emeraude.n2s3.support.N2S3ResourceManager
import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._
import squants.electro.ElectricPotentialConversions.ElectricPotentialConversions


object  ExampleMnist extends App {
  implicit val timeout = Config.longTimeout

  QBGParameters.alf_m = 0.005f
  QBGParameters.alf_p = 0.01f
  QBGParameters.beta_m = 2f
  QBGParameters.beta_p = 2f

  val n2s3 = new N2S3("N2S3")

  val inputStream = InputMnist.Entry >> SampleToSpikeTrainConverter[Float, InputSample2D[Float]](0, 22, 150 MilliSecond, 350 MilliSecond) >> N2S3Entry
//  val inputLayer = n2s3.createInput(Mnist.distributedInput("data/train2k-images.idx3-ubyte", "data/train2k-labels.idx1-ubyte"))
  val inputLayer = n2s3.createInput(inputStream)
  val dataFile = N2S3ResourceManager.getByName("mnist-train-images").getAbsolutePath
  val labelFile =  N2S3ResourceManager.getByName("mnist-train-labels").getAbsolutePath
  inputStream.append(InputMnist.DataFrom(dataFile, labelFile))

  val unsupervisedLayer = n2s3.createNeuronGroup()
    .setIdentifier("Layer1")
    .setNumberOfNeurons(30)
    .setNeuronModel(LIF, Seq(
      (MembranePotentialThreshold, 35 millivolts)))

  inputLayer.connectTo(unsupervisedLayer, new FullConnection(() => new SimplifiedSTDP))
  unsupervisedLayer.connectTo(unsupervisedLayer, new FullConnection(() => new InhibitorySynapse))

  n2s3 create()

  val inputToClassifierIndex = new ConnectionIndex(inputLayer, unsupervisedLayer)

  n2s3.addNetworkObserver(new SynapticWeightSelectGraphRef(
    for(outputIndex <- 0 until unsupervisedLayer.shape.getNumberOfPoints) yield {
      for(inputX <- 0 until InputMnist.shape.dimensions(0)) yield {
        for(inputY <- 0 until InputMnist.shape.dimensions(1)) yield {
          val input = inputLayer.getNeuronPathAt(inputX, inputY)
          val output = unsupervisedLayer.getNeuronPathAt(outputIndex)
          inputToClassifierIndex.getConnectionsBetween(input, output).head
        }
      }
    },
    SynapticWeightSelectGraph.heatMap,
    4,
    100)
  )

  println("Start Training ...")
  n2s3.runAndWait()

  val dataTestFile = N2S3ResourceManager.getByName("mnist-test-images").getAbsolutePath
  val labelTestFile =  N2S3ResourceManager.getByName("mnist-test-labels").getAbsolutePath

  inputStream.append(InputMnist.DataFrom(dataTestFile, labelTestFile))

  println("Start Testing ...")
  unsupervisedLayer.fixNeurons()
  val benchmarkMonitor = n2s3.createBenchmarkMonitor(unsupervisedLayer)

  n2s3.runAndWait()
  println(benchmarkMonitor.getResult.evaluationByMaxSpiking)
  benchmarkMonitor.exportToHtmlView("test.html")

  n2s3.destroy()
}
现在我想在
test
对象文件中创建相同的函数,并在
examplemlist
文件中调用它们。 因此,我在测试对象文件中创建了一个定义
使用\u Timeout\u值配置\u Actors\u
。因此,在
examplemList
文件中,每当我用
test替换
implicit val timeout=Config.longTimeout
行时,用timeout\u值配置\u Actors\u都可以正常工作,但当我尝试用
测试替换QBGParameters部分时,为\u MNIST设置参数时会抛出错误


我知道这是一个简单的问题,但我是Scala的新手,请指导我。

我想说写一个好的DSL不是一个简单的任务,你可能想从更基本的东西开始。即使调用test.Configure\u Actors\u和\u Timeout\u值不会编译失败,它也不会做任何事情,因为函数返回
Unit
。是的,我可以理解这就是为什么我需要这方面的帮助。
package fr.univ_lille.cristal.emeraude.n2s3.apps
import fr.univ_lille.cristal.emeraude.n2s3.core.actors.Config
import fr.univ_lille.cristal.emeraude.n2s3.models.synapses.{InhibitorySynapse, QBGParameters, SimplifiedSTDP}
object test {
  def Configure_Actors_With_Timeout_Value {
    implicit val timeout = Config.longTimeout}

  def Set_Parameters_for_MNIST =
  {
  QBGParameters.alf_m = 0.005f
  QBGParameters.alf_p = 0.01f
  QBGParameters.beta_m = 2f
  QBGParameters.beta_p = 2f} **/
}
}