Feature #3450


Format Strings with Named Arguments & Hash#default

Added by runpaint (Run Paint Run Run) almost 13 years ago. Updated over 5 years ago.

Target version:


Is it intentional that the, undocumented, feature #442 (named arguments in format strings) ignores the Hash's default value?

hash = {greeting: 'Hello'}.tap{|h| h.default = 'World'}
'%{greeting}, %{greeted}' % hash
#=> KeyError: key{greeted} not found

It's quite common for templates to use default values. In interface localisation, untranslated strings may need to be substituted for the equivalent in the native language, or replaced with a generic string in the target language. When building reports with format strings, a default value of an empty string allows unexpanded format sequences to be non-fatal. In both cases, a default proc would provide even further flexibility.

Another perspective is that this behavior unnecessarily breaks the abstraction that default values are just like any other.


3450.patch (578 Bytes) 3450.patch judofyr (Magnus Holm), 06/18/2010 07:07 PM
Actions #1

Updated by judofyr (Magnus Holm) almost 13 years ago

I believe this patch should fix it, but this also has the side effect that KeyError will never be raised (since it will always use the default value, which is nil be default). There's probably some more code which can be removed if we apply the patch, but it seems to me that this is intentional behaviour though…

Updated by nahi (Hiroshi Nakamura) about 11 years ago

  • Description updated (diff)
  • Assignee set to nobu (Nobuyoshi Nakada)
Actions #3

Updated by shyouhei (Shyouhei Urabe) about 11 years ago

  • Status changed from Open to Assigned

Updated by mame (Yusuke Endoh) over 10 years ago

  • Target version changed from 2.0.0 to 2.6

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

I think this is a trade-off.
Silently ignoring undefined keys may not preferable for somebody.
I don't think differentiating simple default value and default proc is good idea.

Updated by matz (Yukihiro Matsumoto) over 5 years ago

  • Status changed from Assigned to Closed

Already fixed.



Also available in: Atom PDF