Skip to content

Non-existant attribute lookup on an Option leads to surprising results #39

@arteme

Description

@arteme

Consider the following scenario:

case class Outer(inner: Option[Inner])
case class Inner(a: String, b: String)

val data1 = Outer(Some(Inner("hello", "world")))
val data2 = Outer(None)

val context = Map("data1" -> data1, "data2" -> data2)

A template substitution {{ data1 }} renders Outer(Some(Inner(hello,world))) and a non-existent attribute one {{ data1.xyz }} renders an empty string. This is logical and one would expect this to be the case for all kinds of objects. However, {{ data1.inner.xyz }} doesn't render an empty string, but renders Inner(hello,world). Granted, {{ data1.inner._.xyz }} works correctly.
Here it is in scastie in a bit more detail: https://scastie.scala-lang.org/zV1Z62kMQIWwZ1TN9oAO8g

Is this an expected behavior or a bug? In general, it would be great to be able to not have to write ._ at the end of an Option,

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions