PowerShell v3 +, 55 bytes
param($a,$b)1..$b|%{"|$((' ','-')[$_-in1,$b]*($a-2))|"}
Toma entrada $ay $b. Bucles de 1a $b. Cada iteración, construimos una sola cadena. El medio se selecciona de una matriz de dos cadenas de longitud única, luego se multiplica por cadenas por$a-2 , mientras está rodeado de tuberías. Las cadenas resultantes se dejan en la tubería, y la salida por vía implícita Write-Outputocurre al finalizar el programa, con el separador de línea nueva predeterminado.
Alternativamente, también a 55 bytes
param($a,$b)1..$b|%{"|$((''+' -'[$_-in1,$b])*($a-2))|"}
Esto ocurrió porque estaba tratando de jugar golf en la selección de matriz en el medio usando una cadena en su lugar. Sin embargo, dado que los [char]tiempos [int]no están definidos, perdemos los ahorros al necesitar convertirlos en una cadena con parens y''+ .
Ambas versiones requieren v3 o más reciente para el -in operador.
Ejemplos
PS C:\Tools\Scripts\golfing> .\draw-an-ascii-rectangle.ps1 10 3
|--------|
| |
|--------|
PS C:\Tools\Scripts\golfing> .\draw-an-ascii-rectangle.ps1 7 6
|-----|
| |
| |
| |
| |
|-----|
Ị:)