Yc error positional argument cannot be used with flag name

Как исправить: SyntaxError: позиционный аргумент следует за аргументом ключевого слова Одна ошибка, с которой вы можете столкнуться в Python: Эта ошибка возникает, когда вы используете позиционный аргумент в функции после использования аргумента ключевого слова . Вот разница между ними: Позиционные аргументы — это аргументы, перед которыми нет «ключевого слова». Пример: my_function (2, 2) Аргументы […]

Содержание

  1. Как исправить: SyntaxError: позиционный аргумент следует за аргументом ключевого слова
  2. Пример: Аргумент позиции следует за аргументом ключевого слова
  3. Дополнительные ресурсы
  4. ERROR: positional argument can not be used with flag ‘—name’ about docs HOT 1 CLOSED
  5. Comments (1)
  6. Related Issues (20)
  7. Recommend Projects
  8. React
  9. Vue.js
  10. Typescript
  11. TensorFlow
  12. Django
  13. Laravel
  14. Recommend Topics
  15. javascript
  16. server
  17. Machine learning
  18. Visualization
  19. Recommend Org
  20. Facebook
  21. Microsoft
  22. Ключ, токен и IP-адрес пользователя отправляются на проверку GET — запросом, что является очень небезопасным способом передачи секретной информации, так как она простым образом может быть скомпрометирована
  23. Ключ, токен и IP-адрес пользователя отправляются на проверку GET — запросом, что является очень небезопасным способом передачи секретной информации, так как она простым образом может быть скомпрометирована
  24. PHP8: Cannot use positional argument after named argument #37231
  25. Comments
  26. Description:
  27. Steps To Reproduce:
  28. Possible Solution

Как исправить: SyntaxError: позиционный аргумент следует за аргументом ключевого слова

Одна ошибка, с которой вы можете столкнуться в Python:

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

Вот разница между ними:

Позиционные аргументы — это аргументы, перед которыми нет «ключевого слова».

  • Пример: my_function (2, 2)

Аргументы ключевых слов — это аргументы , перед которыми стоит «ключевое слово».

  • Пример: my_function(a=2, b=2)

Если вы используете позиционный аргумент после аргумента ключевого слова, Python выдаст ошибку.

  • Пример: my_function(a=2, 2)

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

Пример: Аргумент позиции следует за аргументом ключевого слова

Предположим, у нас есть следующая функция в Python, которая умножает два значения, а затем делит на третье:

В следующих примерах показаны допустимые и недопустимые способы использования этой функции:

Правильный способ №1: все позиционные аргументы

Следующий код показывает, как использовать нашу функцию со всеми позиционными аргументами:

Никакой ошибки не возникает, потому что Python точно знает, какие значения использовать для каждого аргумента в функции.

Верный способ № 2: все аргументы ключевых слов

Следующий код показывает, как использовать нашу функцию со всеми аргументами ключевого слова:

И снова ошибка не возникает, потому что Python точно знает, какие значения использовать для каждого аргумента в функции.

Действенный способ № 3: позиционные аргументы перед ключевыми аргументами

Следующий код показывает, как использовать нашу функцию с позиционными аргументами, используемыми перед аргументами ключевого слова:

Никакой ошибки не возникает, потому что Python знает, что аргументу a должно быть присвоено значение 4 .

Неверный способ: позиционные аргументы после аргументов ключевого слова

Следующий код показывает, как мы можем попытаться использовать функцию с позиционными аргументами, используемыми после аргументов ключевого слова:

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

В частности, Python не знает, следует ли присваивать значения 10 и 5 аргументам b или c , поэтому он не может выполнить функцию.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Источник

ERROR: positional argument can not be used with flag ‘—name’ about docs HOT 1 CLOSED

Hello, thank you for your issue. The error was due to an extra = sign. We’ve fixed the documentation: https://cloud.yandex.ru/docs/cos/solutions/vm-create-with-second-disk

  • YDB YQL неверная документация
  • Список нетарифицируемых сервисов устарел HOT 1
  • Криво описана тарификация smartcaptcha HOT 1
  • Хочу добавить примеры отправки логов в cloud logging на языке golang HOT 1
  • Broken example of using SpeechKit API v3 HOT 1
  • [новое руководство?] Powershell модуль для работы с Яндекс Облаком
  • Пошаговая инструкция для развертывания Wazuh как DevSecOps платформы
  • Не рабочая ссылка на странице HOT 1
  • Bulder delete toc.yaml
  • Добавление зависимости НЕ из npm репозитория в Node.js serverless функциях
  • Не корректный пример speechkit tts v3 HOT 1
  • Типы файлов для загрузки HOT 1
  • Postgresql User does not exist HOT 1
  • Допущена ошибка в логике функции
  • Выбран небезопасный способ передачи SERVER_KEY HOT 2
  • «version» is required in redis, but no definition was found HOT 1
  • Shard name is not specified for host in ru-central1-a if run example redis with sharded
  • Инструкция по подготовке API-ключа для использования Translate HOT 1
  • Ошибка в yaml «Работа с группой виртуальных машин с автоматическим масштабированием»
  • Добавить примеры работы .NET с AWS SDK для Data Streams

Recommend Projects

React

A declarative, efficient, and flexible JavaScript library for building user interfaces.

Vue.js

🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

Typescript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

TensorFlow

An Open Source Machine Learning Framework for Everyone

Django

The Web framework for perfectionists with deadlines.

Laravel

A PHP framework for web artisans

Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

javascript

JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

Some thing interesting about web. New door for the world.

server

A server is a program made to process requests and deliver data to clients.

Machine learning

Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

Visualization

Some thing interesting about visualization, use data art

Some thing interesting about game, make everyone happy.

Recommend Org

Facebook

We are working to build community through open source technology. NB: members must have two-factor auth.

Microsoft

Open source projects and samples from Microsoft.

Источник

Ключ, токен и IP-адрес пользователя отправляются на проверку GET — запросом, что является очень небезопасным способом передачи секретной информации, так как она простым образом может быть скомпрометирована

Created at 1 week ago

Могу дополнить документацию по работе с AWS SDK для Data Streams на основе примера.

Created at 1 week ago

Сценарий «Работа с группой виртуальных машин с автоматическим масштабированием» по доке https://cloud.yandex.ru/docs/compute/tutorials/vm-autoscale из UI

Приведенный в сценарии yaml скрипт не будет работать. С текущей версией container-optimized-image требуется диск 30+ Гб. Об этом говорится в ошибке:

Следует увеличить размер диска до 30G.

Created at 1 month ago

В настоящий момент в документации есть лишь инструкция, рассказывающая как использовать Translate в своих bash/python скриптах. Но во многих случаях люди приходят чтобы просто узнать как получить API-ключ, который они будут вставлять в уже готовые решения. Сейчас для них нет быстрого способа разобраться в этом. Им приходиться читать про выдачу API-ключей и создание сервисных аккаунтов, прыгая по разным кускам документации.

Я предлагаю написать короткую инструкцию, которая будет решать задачу «Получение API-ключа для использования Yandex Translate».

В ней не будет ничего особенного, просто информация будет собрана в одном месте:

  1. Описаны предварительные условия (наличие платежного аккаунта)
  2. Создание сервисного аккаунта
  3. Назначение роли ai.translate.user
  4. Получение API-ключа

Думаю, что вариантов через CLI и Веб будет достаточно.

Источник

Ключ, токен и IP-адрес пользователя отправляются на проверку GET — запросом, что является очень небезопасным способом передачи секретной информации, так как она простым образом может быть скомпрометирована

Created at 1 week ago

Могу дополнить документацию по работе с AWS SDK для Data Streams на основе примера.

Created at 1 week ago

Сценарий «Работа с группой виртуальных машин с автоматическим масштабированием» по доке https://cloud.yandex.ru/docs/compute/tutorials/vm-autoscale из UI

Приведенный в сценарии yaml скрипт не будет работать. С текущей версией container-optimized-image требуется диск 30+ Гб. Об этом говорится в ошибке:

Следует увеличить размер диска до 30G.

Created at 1 month ago

В настоящий момент в документации есть лишь инструкция, рассказывающая как использовать Translate в своих bash/python скриптах. Но во многих случаях люди приходят чтобы просто узнать как получить API-ключ, который они будут вставлять в уже готовые решения. Сейчас для них нет быстрого способа разобраться в этом. Им приходиться читать про выдачу API-ключей и создание сервисных аккаунтов, прыгая по разным кускам документации.

Я предлагаю написать короткую инструкцию, которая будет решать задачу «Получение API-ключа для использования Yandex Translate».

В ней не будет ничего особенного, просто информация будет собрана в одном месте:

  1. Описаны предварительные условия (наличие платежного аккаунта)
  2. Создание сервисного аккаунта
  3. Назначение роли ai.translate.user
  4. Получение API-ключа

Думаю, что вариантов через CLI и Веб будет достаточно.

Источник

PHP8: Cannot use positional argument after named argument #37231

  • Laravel Version: 7.24.0
  • PHP Version: 8.0.5
  • Database Driver & Version: n.a. (mariadb Ver 15.1 Distrib 10.5.9-MariaDB, for Linux (x86_64) using readline 5.1)

Description:

PHP 8 now has named arguments (on method calls).
When coming from a route and loading the class, those arguments are build into an array at Illuminate/Routing/RouteDependencyResolverTrait.php, method resolveMethodDependencies

This $parameters array will be filled like so:

As you can see, the numbering is off, but PHP7 allows for this.

Steps To Reproduce:

Give the controller method multiple arguments, make sure to have an argument after the argument you define in de route.
For instance: FileController::get(Request $request, File $file, $forceFromDisk = false) <. >
Create the route: Route::get(‘//get’, ‘FileController@get’);
in PHP7, this will call the method, no errors
in PHP8, this will fail:

Possible Solution

Either make sure the resulting array is all positional arguments or named arguments, not both.
This can be accomplished by updating the resolveMethodDependencies method on IlluminateRouting . RouteDependencyResolverTrait :

This way, the resulting parameters array, used in the IlluminateRouting . ControllerDispatcher :: dispatch method ( $controller->callAction() ), will have the arguments named AND in the right order, being compatible with PHP8 and still backwards compatible with previous versions of both PHP and Laravel.

The text was updated successfully, but these errors were encountered:

Источник

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

I decided to create the issue in the docs repo. However, I don’t know whether it is a right place to state the issue. Please point me to a correct place if it is needed.

Good news: python37 runtime environment allows to define handler as async def. This is a huge advantage versus sync-only handlers of AWS, for example.

Bad news: however, the handler is called using asyncio.run. This could be investigated from the traceback in case of exception: File "/function/runtime/runtime.py", line 157, in handle_eventn result = asyncio.run(result). This causes RuntimeError of Task … got Future … attached to a different loop if any of the resources are created outside the function (which is a common case for initialising a database connection) since asyncio.run creates a new loop.

Example code:

import aioch

ch = aioch.Client(…)  # attached to an initially created loop

async def echo(event, ctx):
    await ch.execute('SELECT 1')  # RuntimeError

Response:

{
    "errorMessage": "Task <Task pending coro=<echo() running at /function/code/index.py:16> cb=[_run_until_complete_cb() at /function/runtime/lib/python3.7/asyncio/base_events.py:157]> got Future <Future pending cb=[_chain_future.<locals>._call_check_cancel() at /function/runtime/lib/python3.7/asyncio/futures.py:351]> attached to a different loop",
    "errorType": "RuntimeError",
    "stackTrace": [
        "  File "/function/runtime/runtime.py", line 157, in handle_eventn    result = asyncio.run(result)n",
        "  File "/function/runtime/lib/python3.7/asyncio/runners.py", line 43, in runn    return loop.run_until_complete(main)n",
        "  File "/function/runtime/lib/python3.7/asyncio/base_events.py", line 583, in run_until_completen    return future.result()n",
        "  File "/function/code/index.py", line 16, in echon    await ch.execute('SELECT 1')n",
        "  File "/function/code/aioch/client.py", line 38, in executen    **kwargs)n"
    ]
}

The proper way to call async serverless functions handlers is asyncio.get_event_loop().run_until_complete(result) which preserves the initially created event loop. Please see a more detailed explanation in my Stack Overflow answer for Amazon Web Services.

Could you please provide any expectations on whether it will be fixed and when? Thank you in advance.

  • Редакция Кодкампа

17 авг. 2022 г.
читать 1 мин


Одна ошибка, с которой вы можете столкнуться в Python:

SyntaxError : positional argument follows keyword argument

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

Вот разница между ними:

Позиционные аргументы — это аргументы, перед которыми нет «ключевого слова».

  • Пример: my_function (2, 2)

Аргументы ключевых слов — это аргументы , перед которыми стоит «ключевое слово».

  • Пример: my_function(a=2, b=2)

Если вы используете позиционный аргумент после аргумента ключевого слова, Python выдаст ошибку.

  • Пример: my_function(a=2, 2)

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

Пример: Аргумент позиции следует за аргументом ключевого слова

Предположим, у нас есть следующая функция в Python, которая умножает два значения, а затем делит на третье:

def do_stuff (a, b):
 return a * b / c

В следующих примерах показаны допустимые и недопустимые способы использования этой функции:

Правильный способ №1: все позиционные аргументы

Следующий код показывает, как использовать нашу функцию со всеми позиционными аргументами:

do_stuff( 4 , 10 , 5 )

8.0

Никакой ошибки не возникает, потому что Python точно знает, какие значения использовать для каждого аргумента в функции.

Верный способ № 2: все аргументы ключевых слов

Следующий код показывает, как использовать нашу функцию со всеми аргументами ключевого слова:

do_stuff(a= 4 , b= 10 , c= 5 )

8.0

И снова ошибка не возникает, потому что Python точно знает, какие значения использовать для каждого аргумента в функции.

Действенный способ № 3: позиционные аргументы перед ключевыми аргументами

Следующий код показывает, как использовать нашу функцию с позиционными аргументами, используемыми перед аргументами ключевого слова:

do_stuff(4, b=10, c=5)

8.0

Никакой ошибки не возникает, потому что Python знает, что аргументу a должно быть присвоено значение 4 .

Неверный способ: позиционные аргументы после аргументов ключевого слова

Следующий код показывает, как мы можем попытаться использовать функцию с позиционными аргументами, используемыми после аргументов ключевого слова:

do_stuff(a= 4, 10, 5)

SyntaxError : positional argument follows keyword argument

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

В частности, Python не знает, следует ли присваивать значения 10 и 5 аргументам b или c , поэтому он не может выполнить функцию.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить KeyError в Pandas
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число
Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Sometimes I want to pass an argument on the command line with no name, say a command like wc, which takes a filename as input:

wc filename.txt

With the flag package, it looks like every flag has to be given a name, with a default value if unspecified.

filename := flag.String("filename", "foo.txt", "Which file to count the words for")

However I don’t want a default value, I want the program to exit with an error code if an argument is not specified. How would I add a required argument to a Go binary?

I would also like to be able to parse arguments with type information, so just checking the Args() directly doesn’t quite do it.

asked Aug 9, 2014 at 3:58

Kevin Burke's user avatar

Kevin BurkeKevin Burke

58.9k73 gold badges184 silver badges298 bronze badges

You just have to check flag.NArg().

From https://golang.org/pkg/flag/#NArg:

NArg is the number of arguments remaining after flags have been processed.

flag.Parse()
if flag.NArg() == 0 { 
    flag.Usage()
    os.Exit(1)
}

Kevin Burke's user avatar

Kevin Burke

58.9k73 gold badges184 silver badges298 bronze badges

answered Aug 9, 2014 at 4:12

OneOfOne's user avatar

OneOfOneOneOfOne

92.9k20 gold badges176 silver badges182 bronze badges

4

You can also use the flag.Narg() function to ensure you have the required number of positional arguments, though I don’t know what it gives you over len(flag.Args())

if flag.NArg() < minArgs { 
    // do something
    ...
}

answered Jul 11, 2015 at 0:27

2

In case anyone is unsatisfied with the standard flag package behavior of stopping the parse as soon as it sees the first positional arg, you can use these small library functions to parse flags in a way that flags can come before or after positional args.

// ParseFlags parses the command line args, allowing flags to be
// specified after positional args.
func ParseFlags() error {
    return ParseFlagSet(flag.CommandLine, os.Args[1:])
}

// ParseFlagSet works like flagset.Parse(), except positional arguments are not
// required to come after flag arguments.
func ParseFlagSet(flagset *flag.FlagSet, args []string) error {
    var positionalArgs []string
    for {
        if err := flagset.Parse(args); err != nil {
            return err
        }
        // Consume all the flags that were parsed as flags.
        args = args[len(args)-flagset.NArg():]
        if len(args) == 0 {
            break
        }
        // There's at least one flag remaining and it must be a positional arg since
        // we consumed all args that were parsed as flags. Consume just the first
        // one, and retry parsing, since subsequent args may be flags.
        positionalArgs = append(positionalArgs, args[0])
        args = args[1:]
    }
    // Parse just the positional args so that flagset.Args()/flagset.NArgs()
    // return the expected value.
    // Note: This should never return an error.
    return flagset.Parse(positionalArgs)
}

answered Oct 20, 2022 at 21:13

Brandon's user avatar

BrandonBrandon

1,1853 gold badges8 silver badges35 bronze badges

Supersumestria

101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,127

1

13.11.2022, 22:42. Показов 383. Ответов 9

Метки нет (Все метки)


Про попытке передать переменную в шаблон

PHP
1
2
3
4
5
6
7
8
9
10
11
        return $this->render(view:'template1.html',['name'=> $name ]);
 
 
         data:compact(var_name : 'product')
 
 
        $product = new Product();
        $order = new Order();
        $user = new User();
 
        return view('admin.dashboard', compact('product', 'order', 'user'));

Всегда ошибка, тоесть не дает ничего передать после запятой .html’,

делал по видео:

Миниатюры

Ошибка Cannot use positional argument after named argument
 



0



Эксперт PHP

4839 / 3852 / 1598

Регистрация: 24.04.2014

Сообщений: 11,300

13.11.2022, 23:49

2

view:'template1.html' — вот это named argument, а это ['name'=> $name ]positional argument
И как говорится в сообщении:

Cannot use positional argument after named argument

А дальше что-то максимальное странное начинается. Во-первых код после return не выполнится никогда, во вторых data:compact(var_name : 'product') с parse error должно падать.



0



Supersumestria

101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,127

14.11.2022, 02:29

 [ТС]

3

Я пробовал только первую строчку,

PHP
1
return $this->render(view:'template1.html',['name'=> $name ]);

дальше варианты которые в ответах на эту ошибку.

Почему не работает как на изображении?



0



53 / 43 / 22

Регистрация: 29.05.2016

Сообщений: 214

14.11.2022, 08:49

4

Эх ребята! Как я понял это Laravel. Научитесь уже юзать PHP Storm . return $this->render(view:’template1.html’,[‘name’=> $name ]); view: Это генерит IDE в качестве подсказки. Уберите это и будет Вам счастье



0



Supersumestria

101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,127

14.11.2022, 21:09

 [ТС]

5

Цитата
Сообщение от matveev1512
Посмотреть сообщение

Как я понял это Laravel.

я смотрю тютор с ютуба по Symfony4, у меня актуально Symfony6?, версия php 8,
а это то что находится по ошибке, да это к ларавель, оно не помогает

PHP
1
2
3
4
5
6
7
8
         data:compact(var_name : 'product')
 
 
        $product = new Product();
        $order = new Order();
        $user = new User();
 
        return view('admin.dashboard', compact('product', 'order', 'user'));

Почему я не могу передать переменную как в тюториале?
я в точности все переписываю!



0



Эксперт PHP

4839 / 3852 / 1598

Регистрация: 24.04.2014

Сообщений: 11,300

14.11.2022, 21:16

6

Цитата
Сообщение от Supersumestria
Посмотреть сообщение

Почему я не могу передать переменную как в тюториале?

Потому что на видео часть текста — подсказка IDE, а не написанный код.



0



101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,127

14.11.2022, 22:27

 [ТС]

7

Цитата
Сообщение от Jewbacabra
Посмотреть сообщение

на видео часть текста — подсказка IDE

https://www.youtube.com/watch?… 17&t=2267s

57:21
I will send everything as second parameter in <render> function,
I will send an array, there will be all data im gona need

«сейчас я хочу сделать приветствие с именем пользователя, как мы это сделаем?
я передам имя как второй параметр в функцию «рэндэр», все данные передаются как массив»

Все что на скрине — написанный код, с результатом работы

При повторном просмотре заметил что он использует файл
twig.yaml



0



Эксперт PHP

4839 / 3852 / 1598

Регистрация: 24.04.2014

Сообщений: 11,300

14.11.2022, 22:37

8

Цитата
Сообщение от Supersumestria
Посмотреть сообщение

Все что на скрине — написанный код, с результатом работы

Нет, там написанный код + подсказка от IDE



0



101 / 53 / 21

Регистрация: 20.12.2009

Сообщений: 1,127

18.11.2022, 20:55

 [ТС]

9

Как в Symfony передаются переменные в шаблон из контроллера?
если не так



0



Эксперт PHP

4839 / 3852 / 1598

Регистрация: 24.04.2014

Сообщений: 11,300

18.11.2022, 22:31

10

Цитата
Сообщение от Supersumestria
Посмотреть сообщение

Как в Symfony передаются переменные в шаблон из контроллера?
если не так

Перед изучением фреймворка не помешало бы изучить язык, на котором этот фреймворк основан

Цитата
Сообщение от matveev1512
Посмотреть сообщение

view: Это генерит IDE в качестве подсказки. Уберите это и будет Вам счастье



0



Задача

Я хотел бы написать функцию с переменное количество параметров (с использованием …), которая вызывает другую функцию с теми же аргументами и новую функцию в конце. Порядок важен! Пример ниже предназначен только для демонстрации.

Что я пробовал

function foo(...$params) {
    $extraVariable = 6;
    var_dump(...$params, $extraVariable);
}
foo(2, 4, 1, 4);

Проблема

Когда я запускаю его, я получаю следующее сообщение об ошибке:

PHP Fatal error: Cannot use positional argument after argument unpacking in /home/user/main.php on line 3

Как я могу достичь своей цели?

Перейти к ответу
Данный вопрос помечен как решенный


Ответы
3

Tl; dr

Распаковка после аргументов не разрешена по замыслу, но есть 2 обходных пути:

  • Создайте массив из нового элемента и распакуйте его как Пол предложил:

    function foo(...$params) {
        $extraVariable = 6;
        var_dump(...$params, ...[$extraVariable]);
    }
    
  • Вставьте новый элемент в параметры:

    function foo(...$params) {
        $extraVariable = 6;
        $params[] = $extraVariable;
        var_dump(...$args);
    }
    

Объяснение

PHP просто не поддерживает это. Вы можете увидеть модульный тест, который проверяет это поведение:

--TEST--
Positional arguments cannot be used after argument unpacking
--FILE--
<?php

var_dump(...[1, 2, 3], 4);

?>
--EXPECTF--
Fatal error: Cannot use positional argument after argument unpacking in %s on line %d

Видите выделенное жирным шрифтом слово?

PHP Fatal error: Cannot use positional argument after argument unpacking in /home/user/main.php on line 3

Так что используйте его распаковку перед.

var_dump($extraVariable, ...$params);

Есть обходной путь является. Вы не можете использовать позиционные аргументы после распакованного, но можете использовать несколько распакованных аргументов; поэтому вы можете просто обернуть свою переменную в литерал массива и развернуть его следующим образом:

var_dump(...$params, ...[$extraVariable]);

Другие вопросы по теме

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Ybug 6 error log
  • Yba you were kicked from this experience there was an error while loading your data
  • Yaw error перевод
  • Yatqa socket error
  • Yaskawa ошибка f10

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии