2010-04-08 2 views
4

Как уже отмечалось ранее, я относительно новичок в lua, но опять же, я быстро узнаю. В последний раз, когда мне помогали здесь, это очень помогло мне, и я смог написать лучший сценарий. Теперь я пришел к другому вопросу, который, я думаю, облегчит мне жизнь. Я понятия не имею, что я делаю с функциями, но я надеюсь, что есть способ сделать то, что я хочу сделать здесь. Ниже вы увидите пример кода, который мне нужно сделать, чтобы разбить некоторые ненужные элементы. Да, я понимаю, что это неэффективно, так что, если кто-то еще лучше знает, как сделать его намного более эффективным, я все уши. То, что я хотел бы сделать, это создать с ним функцию, чтобы я мог разбить любую переменную простым вызовом (например, stripdown (winds)). Я ценю любую помощь, которая предлагается, и любые уроки. Благодаря!Помощь с функциями Lua

winds = string.gsub(winds,"%b<>","") 
winds = string.gsub(winds,"%c"," ") 
winds = string.gsub(winds," "," ") 
winds = string.gsub(winds," "," ") 
winds = string.gsub(winds,"^%s*(.-)%s*$", "%1)") 
winds = string.gsub(winds,"&nbsp;","") 
winds = string.gsub(winds,"/ ", "(") 

Джош

ответ

2

Превращение его в функцию является легкой частью.

function stripdown(winds) 
    winds = string.gsub(winds,"%b<>","") 
    winds = string.gsub(winds,"%c"," ") 
    winds = string.gsub(winds," "," ") 
    winds = string.gsub(winds," "," ") 
    winds = string.gsub(winds,"^%s*(.-)%s*$", "%1)") 
    winds = string.gsub(winds,"&nbsp;","") 
    winds = string.gsub(winds,"/ ", "(") 
    return winds 
end 

Эта функция, как написано, производит и оставляет много промежуточных результатов строки, что может быть относительно дорогостоящей операцией. Почти наверняка стоит тщательно изучить документацию для string.gsub() и ее pattern language. Должно быть возможно сделать хотя бы часть того, что вы указали при меньшем количестве операций.

+0

Да, я надеюсь уменьшить работу, которую он должен выполнить. У меня есть идея, как это сделать, но это определенно шаг в правильном направлении. Благодаря! – Josh

3

Для функции, как это, я большой поклонник синтаксиса объекта:

function stripdown(winds) 
    winds = winds:gsub("%b<>","") 
       :gsub("%c"," ") 
       :gsub(" "," ") 
       :gsub(" "," ") 
       :gsub("^%s*(.-)%s*$", "%1)") 
       :gsub("&nbsp;","") 
       :gsub("/ ", "(") 
    return winds 
end 

Эта версия не более или менее эффективными, чем другие, но есть намного меньше синтаксической шум, и я нахожу его легче видеть, что происходит.

Существует техническая причина не просто возвращать большое выражение, а потому, что gsub возвращает два результата. Присвоение его winds «отрегулирует» второй (нежелательный) результат, и функция возвращает только строку.

4

Это должно быть немного лучше:

function stripdown(str) 
    return (str:gsub("%b<>","") 
       :gsub("[%c ]+"," ") 
       :gsub("^%s*(.-)%s*$", "%1)") 
       :gsub("&nbsp;","") 
       :gsub("/ ", "(")) 
end 

Уменьшенный 3 из шаблонов вплоть до одного; Скобки вокруг выражения return уменьшают вывод только до первого возвращаемого значения из gsub.

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