It sounds like you're trying to come up with something like a Monad. What you want to do is already built into the language and distributed in the idiomatic scala. I'm not an expert at Monads, but they say the option is a kind of Monad.
You specifically request the ability to write:
val x = someString or "default string"
What makes someString evaluate to false? In most languages, you would test if (someString! = Null) and what you do in your example. Idiomatic scala avoids using null, instead it uses None.
So in the scala syntax you will have
val someString:Option[String] = getAString()
or
val someString:Option[String] = Some("whatever")
or
val someString:Option[String] = None
and then you will have:
val x = someString getOrElse "default string"
This is almost what you asked for.
If you want to implement something similar on your own, look at the interface for getOrElse in Option (similar versions exist in Map and other places in the standard library):
final def getOrElse[B >: A](default: β B): B
In this example, the parameter someString is of type (i.e. String) represented by A. B must be A or a supertype A. The return type will be B (which may be A). For instance:
val x:Option[Int]=1 x getOrElse 1.0
AnyVal is the most specific common ancestor of Int and Double. Note that there is AnyVal, not Any.
If you want it to be Double instead of AnyVal, you need x to be the [Double] option (or you need another implicit). There is a built-in implicit conversion from Int to Double, but not from Option [Int] to Option [Double]. Implicit conversion is why your 2 gets promoted to Float, and not because of your logical logic.
I do not think that your operators and the implicits method are the best solution to this problem. There are many ways to write concise, elegant scala code using options, a filter, an existing one, map, flatMap, etc. that can handle the kinds of operations you want to perform.
You may find this helpful:
http://www.codecommit.com/blog/ruby/monads-are-not-metaphors