跳转到内容

Ring/Lessons/Eval() 和调试

来自维基教科书,为开放世界提供开放书籍

Eval() 和调试

[编辑 | 编辑源代码]

在本节中,我们将学习

  • 使用 Try/Catch/Done 处理错误
  • Eval() 函数
  • Raise() 函数
  • Assert() 函数



Try/Catch/Done

[编辑 | 编辑源代码]

语法

	Try
		Statements...
	Catch
		Statements...
	Done

Try 块中的语句将被执行,如果发生任何错误,则 catch 块中的语句将被执行。

在 catch 块中,我们可以使用变量 cCatchError 获取错误消息。

例子

	Try
		see 5/0
	Catch
		see "Catch!" + nl + cCatchError
	Done

输出

	Catch!
	Error (R1) : Cann't divide by zero !



Eval() 函数

[编辑 | 编辑源代码]

我们可以使用 Eval() 函数在运行时从字符串执行代码。

语法

	Eval(cCode)

例子

	Eval("nOutput = 5+2*5 " )
	See "5+2*5 = " + nOutput + nl			 
	Eval("for x = 1 to 10 see x + nl next")		 
	Eval("func test see 'message from test!' ")	 
	test()

输出

	5+2*5 = 15
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	message from test!



Raise() 函数

[编辑 | 编辑源代码]

我们可以使用 Raise() 函数引发异常。

语法

	Raise(cErrorMessage)

该函数将显示错误消息,然后结束程序的执行。

我们可以使用 Try/Catch/Done 避免 raise() 函数生成的异常。

例子

	nMode = 10

if nMode < 0 or nMode > 5 raise("Error : nMode not in the range 1:4") ok

输出

	Line 4 Error : nMode not in the range 1:4
	In raise in file tests\raise.ring

例子

	try 
		testmode(6)
	catch
		see "avoid raise!"
	done

	testmode(-1)

	func testmode nMode

		if nMode < 0 or nMode > 5
			raise("Error : nMode not in the range 1:4")
		ok

输出

	avoid raise!
	Line 12 Error : nMode not in the range 1:4
	In raise In function testmode() in file tests\raise2.ring
	called from line 7  in file tests\raise2.ring

Assert() 函数

[编辑 | 编辑源代码]

我们可以使用 Assert() 函数在执行代码之前测试条件。

如果测试失败,程序将被终止,并显示包含断言条件的错误消息。

语法

	Assert( condition )

例子

	x = 10
	assert( x = 10)
	assert( x = 100 )

输出

	Line 3 Assertion Failed!
	In assert in file tests\assert.ring


华夏公益教科书