【发布时间】:2018-08-03 04:45:57
【问题描述】:
在我的服务中遇到一个问题,放置在 Scala 类中的任何 for 循环都会被跳过并且不会进入循环执行:
def createSample(){
for (x <- 0 until 3) {
println(x)
}
}
另一个例子:
class messageTest extends FunSpec with GivenWhenThen with Matchers {
def validatemessage(message: message, checkMessageRef: Boolean = true) = {
assert(message.getMessageId == UserId.fromString("545n”))
if (checkMessageRef) {
assert(message.getMessageReferenceText == “refersnce”)
}
}
val messageV5 = createmessageV5
val testmessage = createtestMessageContextV5
describe("message") {
it("throws an error if message is not populated") {
assert(
intercept[InvalidFieldException] {
new message(null, testmessage, "Search")
}.getMessage == "Message Context cannot be null")
}
it("throws an error if MessagetestContext is not populated") {
assert(
intercept[InvalidFieldException] {
new message(messageV5, null, “Fetch”)
}.getMessage == "test Message Context cannot be null")
}
it("should initiate the context with testmessage when populated") {
When("the constructor is called with valid data")
messageV5.setUserId(“123454")
val message = new message(messageV5, testmessage, "Search")
Then("message is correctly populated")
validatemessage(message, false)
}
it("should initiate debugTrace to accordingly to the input provided in the message") {
val messageV5 = createmessageV5
messageV5.setUserGUID("123454")
When("the with a 'null' DebugTrace object")
messageV5.setDebugTrace(null)
Then("message debug trace is false")
assert(!new message(messageV5, testmessage, "Search").getDebugTrace)
When("the with a 'false' DebugTrace object")
messageV5.setDebugTrace(false)
Then("message debug trace is false")
assert(!new message(messageV5, testmessage, "Search").getDebugTrace)
When("the with a 'true' DebugTrace object")
messageV5.setDebugTrace(true)
Then("message debug trace is false")
assert(new message(messageV5, testmessage, "Search").getDebugTrace)
}
}
def createmessageV5: messageType = {
val messageV5 = new messageType
***for (x <- 0 until 3) {
println(x)
}***
messageV5.setMessageId(“545n”)
messageV5.setMessageReference(“reference”)
messageV5
}
}
以上只是测试的一部分,但它按预期工作,但是当我将这个 for 循环添加到类中时,它会被跳过,无论我将它放在什么 scala 测试中,都会发生同样的情况。
简而言之,当它编译时,由于某种原因,它被读取为空语句,然后跳到下一行可执行代码。
【问题讨论】:
-
我一定会得到
0 1 2。确保从主函数调用createSample() -
您是否在代码中的任何位置调用
createSample()方法? -
如何知道
for之前/之后的代码是否被执行? -
到目前为止您尝试过什么来解决它?
-
我在 scala 类中运行测试时调试了代码,每次遇到 for 循环时它都会跳过它并且不进入执行 println
标签: java scala for-loop syntax compilation