2015-05-28 2 views
-1

Хорошо, поэтому я работаю на небольшом языке сценариев, используя консольное приложение VB.Функция вызова, когда пользовательские типы Определенное ключевое слово

Я хочу, чтобы пользователь ввел «говорить („что-то“)», и это вызывает функцию, которую я сделал под названием «говорят», есть способ вызова функции и по-прежнему использовать следующий код:

Module Module1 

Sub say(sayline) 
    Console.WriteLine(sayline) 
End Sub 


Sub Main() 

    Dim cmd As String 
    Console.WriteLine(">") 
    Do 
     Console.Write("") 
     cmd = Console.ReadLine() 
     If cmd IsNot Nothing Then cmd 
    Loop While cmd IsNot Nothing 



End Sub 

End Module 
+0

Что должна делать эта линия? 'If ​​cmd IsNot Nothing Then cmd' – ilans

+0

Эта строка даже не компилируется – Fabio

+0

Проверьте это: [http://stackoverflow.com/questions/7898310/using-regex-to-balance-match-parenthesis](http://stackoverflow. com/questions/7898310/using-regex-to-balance-match-close-скобка) – Fabio

ответ

0

Если вы хотите, чтобы вызвать метод say при вводе слова say(something) и отображать слово something, то вы можете просто иметь определенное условие, что если пользователь вводит слово say внутри ввода затем вызвать say method еще, делать все, что хотите сделать под другой частью. Разберите вход и опустите слово say со входа и покажите его.

У вас может быть ваш код таким образом, например. (Я только что скопировал ваш код и добавил некоторые коды, чтобы встретить то, что вы хотели ... в моем понимании)

Module Module1 
    Sub say(ByVal sayline) 
    Console.WriteLine(sayline) 
    End Sub 

    Sub Main() 
    Dim cmd As String 
    Do 
     Console.Write("> ") 
     cmd = Console.ReadLine() 
     Try 
      If cmd IsNot Nothing And cmd.Substring(0, 3).ToUpper().Equals("SAY") Then 
       say(parseInput(cmd)) 
      End If 
     Catch ex As Exception 
      Console.WriteLine("message here") 
     End Try 
    Loop While cmd IsNot Nothing 
    End Sub 

    Function parseInput(ByVal cmd As String) As String 
    Dim input As String = "" 
    For index As Integer = 3 To cmd.Length - 1 
     If Char.IsLetter(cmd) Then 
      input += cmd.Substring(index, 1) 
     Else 
      input = input 
     End If 
    Next 
    Return input 
    End Function 
End Module 
+0

Спасибо, работает нормально. :) – ZyDevs

+0

@ZyDevs рады помочь :) – MAC

+0

На самом деле, этот подход абсолютно неверен. Что делать, если я вхожу в 'say'? Он будет называть 'say ('ng'). Насколько я понимаю, автор хочет написать язык сценария и использовать 'substring', потому что это не хорошее начало. Btw, 'input = input' - это весело. –

1

Нет, вы не можете просто вызвать метод из строки пользователя. Вам нужно интерпретировать введенные данные.

Во-первых, вам необходимо разделить имя и аргументы метода так, чтобы введенный "say('something')" преобразуется в say и something. Помните, что пользователь может ввести неверные данные, и вам нужно проверить правильность этого вызова - все это касается синтаксического и лексического анализа. Надеюсь, вы понимаете, как это сделать, потому что это довольно сложно.

Затем вам нужно проверить, есть ли у вас метод под названием say. В случае простой и простой конструкции достаточно будет switch. Если у вас есть такой метод, то передайте этот аргумент something. Иначе выведите что-то вроде «неизвестного метода».