Руби необязательные параметры

В конце концов, я в конечном итоге вручную исправил шрифт, используя справку из этого ответа:

Пользовательское вертикальное выравнивание шрифта UIButton

120
задан Nakilon 15 January 2013 в 18:53
поделиться

3 ответа

Это невозможно с рубином в настоящее время. Вы не можете передавать «пустые» атрибуты в методы. Самое близкое, что вы можете получить, это передать nil:

ldap_get(base_dn, filter, nil, X)

Однако, это установит область действия на nil, а не LDAP :: LDAP_SCOPE_SUBTREE.

Что вы можете сделать, это установить значение по умолчанию в вашем методе:

def ldap_get(base_dn, filter, scope = nil, attrs = nil)
  scope ||= LDAP::LDAP_SCOPE_SUBTREE
  ... do something ...
end

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

130
ответ дан 24 November 2019 в 01:36
поделиться

Вам почти всегда лучше использовать хэш опций.

def ldap_get(base_dn, filter, options = {})
  options[:scope] ||= LDAP::LDAP_SCOPE_SUBTREE
  ...
end

ldap_get(base_dn, filter, :attrs => X)
136
ответ дан 24 November 2019 в 01:36
поделиться

Невозможно сделать это так, как вы определили ldap_get . Однако, если вы определите ldap_get следующим образом:

def ldap_get ( base_dn, filter, attrs=nil, scope=LDAP::LDAP_SCOPE_SUBTREE )

Теперь вы можете:

ldap_get( base_dn, filter, X )

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

Объяснение этого простое: каждый аргумент в Ruby не обязательно должен иметь значение по умолчанию, поэтому вы не можете назвать его так, как вы указали. Например, в вашем случае первые два аргумента не имеют значений по умолчанию.

3
ответ дан 24 November 2019 в 01:36
поделиться
Другие вопросы по тегам:

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