Hey guys
a quick question about the language, I feel like this is something I do quite frequently:
if(condition) is:true then call 'add' else is:false then call 'remove'
I think we can generalize add to ‘someForwardMethod’ and remove to ‘someReverseMethod’. Often we derrive whether we want to go forward or backward from some domain logic, in that sense we need to map from a boolean value to a functor.
java eg:
implicitTerminalStyle.addListener((source, wasImplicit, isNowImplicit) -> {
if(isNowImplicit == wasImplicit){ return; }
if(isNowImplicit){
getSemanticListeners().add(listener);
}
else{
getSemanticListeners().remove(listener);
}
});
with kotlin, and with respect to the body, I’m wondering if I can get some first-class-coolness on add
and remove
to refactor this out, I was hoping for
semanticListeners.run { if(isNowImplicit) ::add else ::remove } (listener)
but my types are getting all confused.
The closest I’ve been able to get is
semanticListeners.run{ if(isNowImplicit) { x:String -> add(x) } else { x:String -> remove(x) }}("Something")
Is there something I can do to leverage better type inference here or is this just too much inference for kotlin (or for kotlin 1.0, but not 1.1?)
Thanks for any help!