output=false по умолчанию для функции cfscript в CFC?

Вот моя модификация @rashy выше. Сценарий выполняет следующие действия:

  • он проверяет, есть ли у вас доступ, если нет, запрашивает его
  • позволяет входить в несколько хостов в списке
  • проходит через список
  • Он находит строку, содержащую имя домена, и удаляет его, затем повторно добавляет его (в случае изменения ip с момента последнего запуска скрипта).
  • если домена нет, он просто добавляет его.

Это сценарий:

@echo off
TITLE Modifying your HOSTS file
COLOR F0
ECHO.


:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params = %*:"="
    echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------

:LOOP
SET Choice=
SET /P Choice="Do you want to modify HOSTS file ? (Y/N)"

IF NOT '%Choice%'=='' SET Choice=%Choice:~0,1%

ECHO.
IF /I '%Choice%'=='Y' GOTO ACCEPTED
IF /I '%Choice%'=='N' GOTO REJECTED
ECHO Please type Y (for Yes) or N (for No) to proceed!
ECHO.
GOTO Loop


:REJECTED
ECHO Your HOSTS file was left unchanged>>%systemroot%\Temp\hostFileUpdate.log
ECHO Finished.
GOTO END


:ACCEPTED
setlocal enabledelayedexpansion
::Create your list of host domains
set LIST=(diqc.oca wiki.oca)
::Set the ip of the domains you set in the list above
set diqc.oca=192.168.111.6
set wiki.oca=192.168.111.4
:: deletes the parentheses from LIST
set _list=%LIST:~1,-1%
::ECHO %WINDIR%\System32\drivers\etc\hosts > tmp.txt
for  %%G in (%_list%) do (
    set  _name=%%G
    set  _value=!%%G!
    SET NEWLINE=^& echo.
    ECHO Carrying out requested modifications to your HOSTS file
    ::strip out this specific line and store in tmp file
    type %WINDIR%\System32\drivers\etc\hosts | findstr /v !_name! > tmp.txt
    ::re-add the line to it
    ECHO %NEWLINE%^!_value! !_name!>>tmp.txt
    ::overwrite host file
    copy /b/v/y tmp.txt %WINDIR%\System32\drivers\etc\hosts
    del tmp.txt
)
ipconfig /flushdns
ECHO.
ECHO.
ECHO Finished, you may close this window now.
ECHO You should now open Chrome and go to "chrome://net-internals/#dns" (without quotes)
ECHO     then click the "clear host cache" button
GOTO END

:END
ECHO.
ping -n 11 192.0.2.2 > nul
EXIT
8
задан James A Mohler 29 November 2012 в 21:57
поделиться

3 ответа

Краткий ответ : Это не имеет значения.

cfscript ничего не выводит, если вы явно не вызываете из него writeOutput (). Сюда входят функции в cfscript , а также любой код cfscript вне функции.

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

Длинный ответ : Это то же самое, что не указывать выходной атрибут.

блоки cfscript ничего не выводят. Любые блоки тегов, если только они не заключены в cfsilent , выводят пробелы, если ничего больше. Да, даже cffunctions работают, но вывод игнорируется, если атрибут output установлен в false.

Суть ответа Питера Боутона верна. Он не заключен ни в cfsilent , ни в cfoutput . Вывод не запрещен, но этого не произойдет, если вы не сделаете это явно.

Вы всегда можете комбинировать cffunction на основе тегов со сценарием, чтобы получить лучшее из обоих миров. Что-то вроде ...

<cffunction name="x" output="false" access="package">
    <cfargument name="y" type="string" required="false" default="YY" />
    <cfscript>
        var someValue = y & "something";
        writeOutput("test"); // this will not be written
        return someValue;
    </cfscript>
</cffunction>

Это позволяет вам указать вывод и доступ к тегу cffunction , а также разрешить аргументы быть необязательными (что нельзя сделать с помощью функций cfscript ),

17
ответ дан 5 December 2019 в 07:36
поделиться

Я не совсем уверен, но предполагаю, что функции сценария в этом отношении такие же, как теги cffunction - в том смысле, что по умолчанию не используется ни истина ни ложь .

Установка атрибута output для функции , следующие случаи:

  • истина эквивалентно функции, заключенной в cfoutput .
  • false эквивалентно функции, заключенной в cfsilent .
  • Оставить значение по умолчанию (undefined) эквивалентно стандартный код, который не заключен ни в cfoutput , ни в cfsilent .

Однако я почти никогда не использую cfscript , и на самом деле это может быть не так - мы 'Придется ждать, пока другие придут и подтвердят или исправят это.

1
ответ дан 5 December 2019 в 07:36
поделиться

Функции cfscript - странная обезьяна. И то, и другое. Вы не можете указать, что они output = "false", но они есть, пока вы не используете writeOutput (), но они сообщаются cfcexplorer как output = "true". Я думаю, что это странный вопрос, которым сейчас занимается консультативный комитет cfml.

4
ответ дан 5 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: