Помощь с функциями Lua - PullRequest
       22

Помощь с функциями Lua

4 голосов
/ 08 апреля 2010

Как отмечалось ранее, я относительно новичок в lua, но опять же, я быстро учусь.В прошлый раз, когда я получил помощь здесь, она мне очень помогла, и я смог написать лучший сценарий.Теперь я перешел к другому вопросу, который, я думаю, облегчит мою жизнь.Я понятия не имею, что я делаю с функциями, но я надеюсь, что есть способ сделать то, что я хочу сделать здесь.Ниже вы увидите пример кода, который я должен сделать, чтобы удалить некоторые ненужные элементы.Да, я понимаю, что это неэффективно, так что если у кого-то есть лучшее представление о том, как сделать его намного более эффективным, я весь в ушах.То, что я хотел бы сделать, это создать функцию с ней, чтобы я мог обрезать любую переменную простым вызовом (например, раздевание (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,"/ ", "(")  

Джош

Ответы [ 3 ]

4 голосов
/ 10 апреля 2010

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

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

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

3 голосов
/ 08 апреля 2010

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

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

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

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

2 голосов
/ 08 апреля 2010

Превратить его в функцию - это самая простая часть.

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 () и языка шаблонов .Должно быть возможно выполнить хотя бы часть из того, что вы указали в меньшем количестве операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...