Skip to content

Latest commit

 

History

History
83 lines (68 loc) · 2.67 KB

lua.md

File metadata and controls

83 lines (68 loc) · 2.67 KB

패턴; Pattern

  • string.find : 주어진 대상(subject) 문자열 안에 있는 패턴을 검색한다.
  • 리턴 : 패턴에 해당하는 부분의 시작 색인과 끝 색인
  • string.find( 'hello world', 'world' ) --> 7 11
  • string.match : find 함수와 비슷하지만 패턴을 발견한 위치를 반환하는 대신, 패턴에 맞는 대상 문자열의 일부분을 반환한다.
  • string.match( 'hello world', 'hello' ) --> hello
  • 패턴이 캡처를 가지고 있다면 string.match 함수는 캡처된 값들을 각각 별도의 반환값으로 반환한다.
  • string.match( 'name = anna', '(%a+)%s*=%s*(%a+)') --> name anna
  • string.gsub : 대상 문자열 안에 있는 패턴에 해당하는 모든 부분을 대체 문자열로 교체
  • 매개변수 : 대상 문자열, 패턴, 대체할 문자열
  • 세 번째 인수로 문자열 대신에 함수 또는 테이블을 사용할 수도 있다. 함수에 전달하는 인수는 캡처 값이며, 반환하는 값을 교체 문자열로 사용한다.
  • string.gsub( 'lua is cute', 'cute', 'great' ) --> lua is great
  • string.gmatch : 문자열에서 패턴과 일치하는 모든 부분을 훑어 나가는 (iterate over) 함수를 하나 반환한다.
words = {}
-- 주어진 문자열 s 안에 있는 모든 단어를 수거하는 처리.
for w in string.gmatch( s, '%a+' ) do
    words[#words + 1] = w
end

활용 예제

  • 특정 문자로 '시작'하는지 확인하기
a = 'hello world'
b = 'hello'
c = 'hi'
print( a:find( '^'..b) ) -- 1 5
print( a:find( '^'..c) ) -- nil
if a:find( '^'..b ) then 
    print( 'yes' ) 
else
    print( 'no' )
end -- yes

lfs

local lfs = require"lfs"

function attrdir (path)
    for file in lfs.dir(path) do
        if file ~= "." and file ~= ".." then
            local f = path..'/'..file
            print ("\t "..f)
            local attr = lfs.attributes (f)
            assert (type(attr) == "table")
            if attr.mode == "directory" then
                attrdir (f)
            else
                for name, value in pairs(attr) do
                    print (name, value)
                end
            end
        end
    end
end

attrdir (".")

3항 연산자

Lua Interface

require 'luanet' -- 실제로 luanet.dll이 필요하다.

luanet.load_assembly 'FbTransferWPF'
ViewModel = luanet.import_type 'FbTransferWPF.ViewModel'

print( ViewModel )