大家可以用自己熟悉的语言实现一段和如下JavaScript代码等价的程序。
亮点在于实现add(2)(3)(4)(5)这种诡异的语法……<script>function add(x){var c = 0;return function(x){c = c + x;arguments.callee.toString = function(){return c;};return arguments.callee;}(x);};alert(add(2)(3)(4)(5));</script>
本帖最后由 LonghronShen 于 2012-4-20 21:30 编辑
先来一份VB.NET的投机取巧解法
[查看全文][mw_shl_code=vbnet,true]Namespace HelloWorldModule Main
Public Class FuncEx(Of TArg, TResult)
Private m_function As Func(Of TArg, TResult)
Default Public ReadOnly Property [Function](ByVal x As TArg) As FuncEx(Of TArg, TResult)
Get
Return New FuncEx(Of TArg, TResult)(Me.m_function, Me.m_function(x))
End Get
End Property
Public Property LastResult() As TResult
Public Sub New(ByVal f As Func(Of TArg, TResult), Optional ByVal lr As TResult = Nothing)
Me.m_function = f
Me.LastResult = lr
End Sub
Public Overrides Function ToString() As String
Return Me.LastResult.ToString()
End Function
End Class
Public Function add(ByVal x As Object) As FuncEx(Of Object, Object)
Static c As Object = 0
c = c + x
Return New FuncEx(Of Object, Object)(
Function(y As Object)
Return add(y)
End Function, c)
End Function
Sub Main()
Console.WriteLine(add(2)(3))
Console.ReadKey(False)
End Sub
End Module
End Namespace[/mw_shl_code]