Как передать kwargs в функцию ruby?На примере Python - PullRequest
0 голосов
/ 23 сентября 2019

Конверт:

$ ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]

Вопрос:

Есть пример на python:

def any_func(a, b=2, c = 0, d=None):
    return c

print(any_func(25, c=30))  # will print 30

Как я могу сделать то же самое на ruby?
Как"kwargs" называется на рубине?Я хотел бы знать это для дальнейшего поиска.

Я попробовал следующий код на ruby:

#!/usr/bin/env ruby
def any_func(a, b = 2, c = 0, d = nil)
  c
end

puts any_func(25, c = 30)  # will print 0, 30 is expected

Ответы [ 2 ]

4 голосов
/ 23 сентября 2019

В Ruby есть как позиционные, так и ключевые аргументы.В отличие от Python, вы не можете смешивать их, но должны объявлять их с соответствующим синтаксисом и предоставлять их соответствующим образом в вызовах методов.

def any_func(a, b: 2, c: 0, d: nil)
  c
end

puts any_func(25, c: 30)

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

Что касается вашего собственного примера вызова вашего any_func метода с any_func(25, c = 30), то, что здесь произошло, вы создали локальную переменную cв контексте вызова со значением 30.Вы также передали это значение второму (необязательному) аргументу b вашего метода.

4 голосов
/ 23 сентября 2019

В Ruby вам нужно использовать синтаксис, похожий на хэш

def any_func(a, b: 2, c: 0, d: nil)
  c
end

any_func(25, c: 30)

def fun(a=1) устанавливает только значение по умолчанию.И если у вас есть any_func(25, c = 30), это означает «вызов any_func с двумя аргументами, 25 и результатом выражения c = 30 (то есть 30)»

Подробнее

...