Что нового

Развитие русской справки

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO
дескриптор поиска кажется мне довольно удачной формулировкой, а вот связанный с указанной строкой - как то не очень.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
asdf8
Во первых возвращается число-идентификатор, даже тип данных другой. Возможно там ассоциированный массив число-дескриптор. Я уже привык что дескриптор это что-то в виде числа идентифицирующее некий объект в системе. В справке по Си нигде не указывается о том, что это дескриптор, вместо этого например для fopen сказано "возвращает указатель на объект файла, который используется для идентификации потока". Создаётся впечатление, что функция ищет первый файл, лучше указать, что функция задаёт параметры поиска и ничего больше, типа объект свойств, набор свойств поиска, для того чтобы используя свойства приступить к поиску. Сейчас существует запутывающая неясность, приходится разгадывать.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO
Как по мне, дескриптор - это некоторая абстрактная фиговина которая позволяет работать связанным с ней функциям которая должна быть освобождена/закрыта после окончания пользования ей. Такое определение является для меня необходимым и достаточным, чтобы пользоваться функциями использующими "дескриптор".
Все конечно имхо.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
asdf8
То, что его нужно закрыть можно увидеть и в примерах и в описании и незакрытие это меньший страх, чем неправильная работа, всего лишь памяти будет занимать больше. Я помню как мне давалась эта функция.
1. Сначала я думал что она ищет первый файл по маске, а FileFindNextFile продолжает поиск.
2. Далее я столкнулся с тем, что при вызове через bat-файл изменялся текущий путь, то есть изначально для поиска в относительной папке от текущего каталога нужно указать в строке не только маску но и путь и причём это для меня оказалась более частая операция, потому что программа должна искать путь своих файлов в своём каталоге, а не в каталоге bat-файла. Да и в дальнейшем, если я задаю жёсткой путь поиска, то должен его указать в этой строке. А случай "без пути" удобен если я пишу консольную программу, то есть в 99% это не для меня.
3. Выяснил, что в маске может быть только один символ подстановки (wildcards). Возможно я интерпретировал это как то что в маске может быть только одна маска, а на деле в имени файла и в расширении может быть только один символ подстановки, а если 2, то я помню какой глюк это вызывало - http://autoit-script.ru/index.php/topic,8266.msg75503.html#msg75503 -это глюк одного поля ягоды, то что в маске нельзя указывать несколько символов подстановки, общее для всех где задействовано wildcards. (хотя здесь я ещё не уверен на 100%, что я прав)

Все эти критерии должны быть написаны ясно, чтобы исключить двусмысленность или неправильную интерпретацию, оно должно быть воспринято однозначно и точно.

Почему набор свойств? Здесь задаются:
1. Путь
2. Маска
3. Номер файла, который будет обновлять (с инкрементом) функция FileFindNextFile.
 

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO [?]
1. Сначала я думал что она ищет первый файл по маске, а FileFindNextFile продолжает поиск.
Судя по названию, любой должен был бы так подумать - не удачное название функции.
 

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Пример из справки функции StringRegExp:
Код:
; Тестовая строка
$sText = '<tage>Текст1</tage> <tage>Текст2</tage> <tage>Текст3</Tage>'

; флаг=1, используется смещение для пошагового поиска всех элементов
$iOffset = 1
While 1
    $aRes = StringRegExp($sText, '(?i)<tage>(.*?)</tage>', 1, $iOffset)
    If @error Then ExitLoop ; Выход из цикла если более не найдено
    $iOffset = @extended ; Сохраняет позицию, от которой начать следующий поиск
    ; Просмотр только одного элемента массива, так как в рег.выр. одна группа
    MsgBox(0, 'флаг=1', 'Найдено = ' & $aRes[0] & @LF & _
            'Позиция начала = ' & $iOffset - StringLen($aRes[0]) & @LF & _
            'Позиция конца = ' & $iOffset - 1) ; Позиции могут использоваться другими строковыми функциями
WEnd


Выдает позицию начала для первого совпадения = 14...

Думаю правильный смысл таков:
Код:
MsgBox(0, 'флаг=1', 'Найдено = ' & $aRes[0] & @LF & _
            'Позиция начала = ' & ($iOffset - StringLen($aRes[0])) - StringLen("</tage><tage>") & @LF & _
            'Позиция конца = ' & $iOffset - 1) ; Позиции могут использоваться другими строковыми функциями
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Kalisnik
Вписал "-14" добавив комментарий. В цикле лучше не вычислять константу. Перезаливать пока не буду.
 

FireCat

Новичок
Сообщения
8
Репутация
0
Добрый день. Наблюдаю опечатку: пропущено "НЕ" (только/НЕ только):

Обратите внимание, что только объявленные переменные могут быть переданы в качестве параметра ByRef; безымянные временные переменные, такие, как значения, возвращённые функциями, также могут быть переданы в качестве параметра ByRef


Note that not only a named variable can be passed for a ByRef parameter - unnamed temporary variables, such as function return values, may be passed as ByRef parameters as well.

Из продолжения фразы, в принципе, понятно, но целиком она немного ступорит.
Спасибо.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
FireCat
Переведите как бы вы хотели видеть перевод этого предложения. Могу сказать что несуществующую переменную нельзя передать, как бы объявив её в ByRef, она должна быть объявлена заранее. Что для вас означает именованная переменная? Все переменные имеют имя. Если фраза ступорит, что вы от меня хотите?
 

FireCat

Новичок
Сообщения
8
Репутация
0
Я просто перевел фрагмент оригинальной справки,
Note that NOT ONLY a named variable can be passed for a ByRef parameter - unnamed temporary variables, such as function return values, may be passed as ByRef parameters as well.
как
Обратите внимание на то, что НЕ ТОЛЬКО именованная переменная может быть передана для параметра ByRef
.

В поставляемой русской справке написано:
Обратите внимание, что ТОЛЬКО объявленные переменные могут быть переданы в качестве параметра ByRef;
.

Если вам кажется, что пишу ерунду, возможно так и есть, я многого пока не понимаю.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
FireCat
да, так и есть, в английской справке именно так и написано – НЕ ТОЛЬКО именованные переменные можно передать.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Kaster
Я не против докопаться до истины, выкладывайте ваши мысли по этому поводу. Страница Func...Return...EndFunc была переведена до меня и хотя я перепроверял, возможно я также не стал изменять текущее описание на непонятное предложение. Моё внутреннее правило/понимание звучит так: всё что переведено должно быть осмысленно, и если предложение непонятно самому переводчику, который в Google в течении 1-3 часов искал ответ на вопрос, то тем более оно будет непонятно и новичку. А раз так, то лучше вообще не переводить предложения, которые не приносят ни какой пользы, кроме отъёма времени и выглядят подозрительно. Я ещё понимаю раздел DllCall, хотя и там фразы выглядят законченными по смыслу. Но в понимании ByRef предназначение очевидно.

1. Вот пример, показывает что необъявленную переменную передавать нельзя, хотя и без ByRef нельзя.
Код:
MsgBox(0, 'Сообщение', _TestByRef($d))

Func _TestByRef(ByRef $z)
	$z = 5
EndFunc


2. Пример показывает, что я передаю функцию в качестве параметра и это не вызывает ошибки.
Код:
MsgBox(0, 'Сообщение', _TestByRef(_Num()))

Func _TestByRef(ByRef $z)
	$z = 5
EndFunc

Func _Num()
	Return 4
EndFunc


Я даже передаю число и это тоже не вызывает ошибки, хотя практичность/смысл сведена на 0.
Код:
MsgBox(0, 'Сообщение', _TestByRef(2))

Func _TestByRef(ByRef $z)
	$z = 5
EndFunc


Что здесь имеется ввиду? Значение рядом с ByRef или значение переданное функцией в переменную под ByRef? Если значение рядом с ByRef, то там может быть только переменная, нельзя использовать там имя функции или явное значение (число, текст и т.д.). Если речь о значении в вызываемой функции, которая передаёт его в переменную под ByRef, то тут может быть всё что угодно, но с практической точки зрения не имеет смысла передавать явные значения в ByRef.

Что толку переводить дословно предложение, если оно не добавляет ума, а только отнимает время? Какой смысл забивать справку сомнительными текстами не приносящими пользы? Справка и так ёмкая и добавлять туда бессмыслицу контр-продуктивно. Я согласен, если человек говорящий о неправильности справки даст правильный перевод и докажет нужность этого. Но этого не произошло. Тогда о чём речь?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
AZJIO
имеется в виду, что в ByRef можно передавать не только именованные параметры типа $var, но и неименнованные, такие как значения возвращаемые функцией. Например
Код:
Func somefunc(ByRef AnotherFunctionThatReturnsArray($somevar))
     ; Do stuff
EndFunc

Кстати, в твоем переводе именно это и написано
безымянные временные переменные, такие, как значения, возвращённые функциями, также могут быть переданы в качестве параметра ByRef.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Kaster
У меня предложенный тобой вариант вызывает ошибку
Код:
MsgBox(0, 'Сообщение',  _Somefunc(9))

Func _Somefunc(ByRef _Fnc($somevar))
	Return 1
EndFunc

Func _Fnc($somevar)
	Return 2
EndFunc


Вызывает ошибку именно в строке ByRef

Вообще в описываемых параметрах функции вроде как запрещены любые функции и вычисления. Допустимо только назначить значения по умолчанию, т.е. знак "=". Остальное ошибка.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
InnI
Что-то не вычисляет
Код:
MsgBox(0, @AutoItVersion,  _Somefunc(9))

Func _Somefunc($somevar+=1)
    Return $somevar
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
AZJIO [?]
Что-то не вычисляет
Я имел в виду вычисление параметров по умолчанию, т.к. ваша фраза "в описываемых параметрах функции ... запрещены любые функции и вычисления" подразумевает невозможность вычисления параметров при их описании (как это и происходит в 3.3.8.0).
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Ладно, для 3.3.11.4 я вряд ли буду делать. Перенимайте эстафету кому это актуально.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Обновлёны промежуточные версии справки.
 
Верх