2014-06-13 14 views

risposta

7

%p si sposa con la funzione C ispunct (C source v 5.2), che corrisponde al seguente:

041 ‘‘!’’  042 ‘‘ ’’  043 ‘‘#’’  044 ‘‘$’’  045 ‘‘%’’ 
046 ‘‘&’’  047 ‘‘’’’  050 ‘‘(’’  051 ‘‘)’’  052 ‘‘*’’ 
053 ‘‘+’’  054 ‘‘,’’  055 ‘‘-’’  056 ‘‘.’’  057 ‘‘/’’ 
072 ‘‘:’’  073 ‘‘;’’  074 ‘‘<’’  075 ‘‘=’’  076 ‘‘>’’ 
077 ‘‘?’’  100 ‘‘@’’  133 ‘‘[’’  134 ‘‘\’’  135 ‘‘]’’ 
136 ‘‘^’’  137 ‘‘_’’  140 ‘‘‘’’  173 ‘‘{’’  174 ‘‘|’’ 
175 ‘‘}’’  176 ‘‘~’’ 

(da man ispunct)

6

un piccolo script per loro trovano:

for i=0,255 do 
    if string.match(string.char(i), "%p") then 
     io.write(string.char(i)) 
    end 
end 
io.write("\n") 

-- $ luajit test.lua 
-- !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~ 
9

La risposta è dipendente dalla locale, è un interf diretto asso alla funzione C.
In realtà, se esiste una funzione standard C che fa qualcosa di simile alla funzione Lua, è quasi certo che la funzione Lua avvolge semplicemente la funzione C, verruche e tutto, anche senza considerare il caso specifico.
(questa è una delle ragioni per file:read() ha ancora trouble reading text with embedded zeroes a 5.2, forse anche avranno a 5,3)

Mentre Amaden ha dato una buona risposta per il locale "C", e ColonelThirtyTwo ha dato il modo giusto per controllare per la localizzazione corrente, lo standard C dice soltanto:

ispunct(): la prova delle funzioni ispunct per qualsiasi carattere di stampa che è uno di una serie specifica locale di caratteri di punteggiatura per i quali non isspace né isalnum è vero. Nella locale "C" , ispunct restituisce true per ogni carattere di stampa per il quale nessuno dei due è uguale a né isalnum è vero