nestedclosure2bug.groovy

来自「Groovy动态语言 运行在JVM中的动态语言 可以方便的处理业务逻辑变化大的业」· GROOVY 代码 · 共 68 行

GROOVY
68
字号
import org.codehaus.groovy.classgen.TestSupport

/**
 * @version $Revision: 2285 $
 */
class NestedClosure2Bug extends TestSupport {
     
    Object f
     
    void testFieldBug() {
    	def closure = {
    		return {
	    		f = 123
	    		return null
	        }
	    }
        def value = closure()
        value = value()
        assert f == 123
    }
     
    void testBugOutsideOfScript() {
    	def a = 123
    	def b = 456
    	def closure = {
    		println b
    		def c = 999
    		return {
    			f = 2222111
    			
    			println f
    			
    			println c
    			def d = 678
    			return { 
    				println f
    				assert f == 2222111
    				println d
    				return a
    			}
    		}
    	}
    	def c2 = closure()
    	def c3 = c2()
    	def value = c3()

		assert f == 2222111    	
    	assert value == 123
    }
    
    void testBug() {
    	assertScript """
	    	def a = 123
	    	def closure = {
	    		return {
	    			return { 
	    				return a
	    			}
	    		}
	    	}
	    	def c2 = closure()
	    	def c3 = c2()
	    	value = c3()
	    	
	    	assert value == 123
"""
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?