Pytanie Różnica między opcją isDefined i nonEmpty opcji Scala


W opcji Scala, jaka jest różnica między jego metodą isDefined i nonEmpty? Czy istnieje różnica w wydajności między nimi?


18
2018-03-21 22:47


pochodzenie


źródło jest często użytecznym zasobem - Rob Starling


Odpowiedzi:


Patrząc na źródło, definicja nonEmpty jest:

final def nonEmpty = isDefined


18
2018-03-21 22:58



Niezupełnie, jest odwrotnie. def isDefined: Boolean = !isEmpty od assembla.com/code/scala-eclipse-toolchain/git/nodes/src/library/... - Kigyo
Nie, Lee zdecydowanie miał rację, twój link do jakiegoś dziwnego i / lub starego widelca. github.com/scala/scala/blob/v2.10.3/src/library/scala/... - Ryan
@Kigyo - Cóż, taka jest definicja isDefined ale pytanie dotyczy związku między nonEmpty i isDefined. - Lee
O tak. W takim razie moje. - Kigyo
@Lee: relacja zostanie opisana logicznie jako "równoważność". Czasem jest napisane w dokumentach matematycznych jako iff (wtedy i tylko wtedy gdy). Innymi słowy, są to te same rzeczy. - Randall Schulz


Możesz spojrzeć na to na odwrót.

Gdyby Option nie dostarczył nonEmpty, byłby zapewniony poprzez konwersję na Iterable, który wywołuje toList.

Czy chcesz zmienić swoje Option do a List tylko po to, by sprawdzić tę nieruchomość? Oczywiście nie.

Tak więc problemem nie jest to, czy nonEmpty jest bardziej skuteczny w stosunku do isDefined, ale w odniesieniu do konwersji.

Gdyby opierało się na konwersji, skończyłoby się robić lengthCompare, który tworzy iterator jako obciążenie.

Tak więc odpowiedź brzmi, że możesz użyć dowolnej preferowanej metody.


3
2018-03-22 01:35





Są dosłownie takie same. wierzę nonEmpty jest dostarczany głównie w celu zachowania spójności z interfejsem API Collection.


2
2018-03-21 23:24





Od Scala 2.13.x codebase, to:

def isDefined: Boolean = !isEmpty
...
final def nonEmpty = isDefined

Logicznie rzecz biorąc, nie ma różnicy między tymi dwoma.


1
2018-02-18 09:53