I'm mainly using the tables to set up a database and then to import data. The defaults allows me to specify values in java, so the stories then don't need to contain the data if it's not relevant to the test, but lets me reuse the same steps.
So (rubbish example) given a database table that needs a name and age, I can have the following line in my @Given step:
Then in 1 scenario/story where age is irrelevant I can simply add
Then in a different scenario where the age is relevant to the test, I can put
The reason for the ExamplesTable#withDefaults(Record) method is it make this easy to do in a scenario:
This isn't my actual domain, It's trade settlement/confirmation, so there's lots of data that's required for each record, most of which is pretty irrelevant for the current test, so this allows the tests to focus on what's important.
I can add some examples to the Trader example in JBehave if you want?
I'm not convinced myself about the Row -> Record rename either, just convinced that Row is the wrong name as they're more useful than simply as Rows. I've just written a ParamaterConverter that will covert "key:value\nkey2:value2" into a Record and I've been considering using them to read the columns of a table, so you can have row/column headers. One idea that crossed my mind was to make ConvertingRecord extend Map<String, String>, and change ExamplesTable#getRow to return ConvertingRecord (renamed to something sensible like ConvertingMap) rather than Map<String, String>. Haven't really thought about it in detail, IE backwards compatibility implications, etc.
I've pushed a patch into a branch on my github fork for this.
https://github.com/dgodfrey/jbehave-core/tree/nested-conversion