2013-12-12 3 views
0

Можно ли создавать переменные для определенного типа в Lua?Как объявить переменные с типом в Lua

E.g. int x = 4

Если это не возможно, есть по крайней мере, какой-то способ, чтобы иметь поддельный «тип», показанный перед переменным, так что каждый, кто читает код будет знать, какой тип переменной должен быть?

E.g. function addInt(int x=4, int y=5), но x/y все равно может быть любой переменной? Мне гораздо легче набрать тип переменной перед ним, а не помещать комментарий выше функции, чтобы любые читатели знали, какой тип переменной она должна быть.

Единственная причина, по которой я прошу, - не ограничивать переменную конкретным типом данных, а просто иметь возможность поместить тип данных перед переменной, независимо от того, что она делает или нет, чтобы позволить читателю знаете, какой тип переменной он должен быть, не получив ошибку.

ответ

0

Единственный способ, которым я могу думать, чтобы сделать это, было бы путем создания пользовательского типа в C.

Lua Integer type

+0

Я знаю, что каждая переменная имеет тип, но есть способ, чтобы положить что-то перед именем переменной, не вызывая ошибки, такие как обув х = 5? Мне не нужен поддельный «тип», чтобы что-либо сделать, но я хотел бы иметь его там, чтобы я знал, какие типы должны быть мои переменные, когда я смотрю на свои функции. Извините, если я был неясен в своем посте. – Drew

+0

Спасибо! Я обнаружил, что OP связанного потока использовал a = int (5), и это достигает того, что я хотел сделать. Мне не обязательно нужен тип, который должен быть перед именем переменной - я просто хотел, чтобы там отображался тип ссылки. – Drew

+0

Создание настраиваемого типа в Lua не изменяет синтаксис. Этот поток посвящен созданию нового типа с пользовательским поведением, но переменные так же нетипизированы, как и всегда. Однако, если синтаксис «a = int (5)» является приемлемым, то достаточно легко сделать эту работу без создания пользовательских типов. @EchoFive – bames53

3

Вы можете сделать это с помощью комментариев:

local x = 4 -- int 

function addInt(x --[[int]], 
       y --[[int]]) 

Синтаксис a = int(5) можно использовать в других комментариях, используя следующее:

function int(a) return a end 
function string(a) return a end 
function dictionary(a) return a end 

a = int(5) 
b = string "hello, world!" 
c = dictionary({foo = "hey"}) 

Тем не менее, это не дает никаких преимуществ по сравнению с комментарием.

+0

«Мне гораздо легче набрать тип переменной перед ним, а не помещать комментарий ...» Я знаю, что могу комментировать, как указано в моем сообщении, - я просто хочу знать, есть ли «поддельные» данные тип перед переменными. – Drew

+0

@EchoFive Мой пример предназначен для того, чтобы показать, что вы можете использовать строгий формат. Ваше предложение подразумевает нечто вроде функции '- [[this function принимает пару ints]] addInt (x, y)', тогда как я как бы расширяю синтаксис: function addInt (- [[int]] x, - - [[int]] y) '. – bames53

+1

@EchoFive Просто изучив [Lua grammar] (http://www.lua.org/manual/5.1/manual.html#8), вы скажете, что комментарии - это единственное, что вы можете вставить в эти места. – bames53

0

Нет. Но я понимаю, что ваша цель - улучшить понимание при чтении и записи вызовов функций.

Утверждение ожидаемого типа данных параметров добавляет лишь немного с точки зрения предоставления спецификации функции. Кроме того, некоторые параметры функции являются полиморфными, принимают определенное значение или функцию или таблицу, из которых можно получить значение для контекста, в котором функционирует функция. См., Например, string.gsub.

При чтении вызова функции единственное, что известно на сайте вызова, - это имя переменной или поля, значение которого вызывается как функция (иногда считывается как «имя» функции), а выражения как фактические параметры. Иногда полезно преобразовать выражения параметров в именованные локальные переменные, чтобы добавить к читаемости.

При записи вызова функции имя функции является ключом. Имена формальных параметров также полезны. Но все же имена (например, типы) не содержат большей части спецификации. Наибольшая помощь приходит из встроенной структурированной документации, используемой в сочетании с IDE, которая описывает контекст имени и выполняет контентную поддержку и презентации доступной документации.

luadoc является одной из таких систем документации. Вы можете написать luadoc для функции, которую вы заявляете.

Eclipse Koneki LDT является одной из таких IDE. Из-за динамического характера Lua это сложная проблема, поэтому LDT не всегда так полезен, как хотелось бы. (Чтобы быть ясным, LDT не использует luadoc, он разработал собственную встроенную систему документации.)

enter image description here

Смежные вопросы