Я хотел бы построить класс, который работает с данной математической функцией. Данная математическая функция может быть простой или очень сложной, но всегда будет иметь:
- одну независимую переменную
- один результат для этой переменной
- неизвестно и потенциально большое количество констант
Ради аргумента, скажем, я просто хочу напечатать результат этих функций, в действительности операции будут сложными (например, итерация для поиска root).
Я не уверен в лучшем способе выполнения sh этого, кроме добавления переменного числа аргументов в словарь, чтобы я всегда мог передать данную функцию в качестве делегата.
Вот что у меня есть:
Sub RunTest()
Dim myvars As New Dictionary(Of String, Double) From {
{"a", 3},
{"b", 2},
{"c", 1},
{"d", -1}
}
Dim MyTest1, MyTest2 As MyTestClass
MyTest1 = New MyTestClass(AddressOf CubicTest, 1.123, myvars)
MyTest2 = New MyTestClass(AddressOf QuadTest, 1.123, myvars)
MyTest1.TestPrint()
MyTest2.TestPrint()
End Sub
Function CubicTest(ByVal xAs Double, ByVal var As Dictionary(Of String, Double)) As Double
Return var("a") * x^ 3 + var("b") * x^ 2 + var("c") * x + var("d")
End Function
Function QuadTest(ByVal xAs Double, ByVal var As Dictionary(Of String, Double)) As Double
Return var("b") * x^ 2 + var("c") * x + var("d")
End Function
Class MyTestClass
Private BaseFunction As FunctionByRef
Private TestValue As Double
Private Variables As Dictionary(Of String, Double)
Delegate Function FunctionByRef(ByVal TestValue As Double, ByVal Variables As Dictionary(Of String, Double)) As Double
Sub New(ByVal BaseFunction As FunctionByRef, ByVal TestValue As Double, ByVal Variables As Dictionary(Of String, Double))
Me.BaseFunction = BaseFunction
Me.TestValue = TestValue
Me.Variables = Variables
End Sub
Sub TestPrint()
Debug.Print(Me.BaseFunction(Me.TestValue, Me.Variables).ToString())
End Sub
End Class
, который, кажется, работает просто отлично, но также выглядит очень неуклюже.
Есть ли более чистый способ достижения sh это?