расширение N STEP или NeXTSTEP / Sun в зависимости от того, кого Вы спрашиваете.
Sun имел довольно большие инвестиции в OpenStep некоторое время. Прежде чем Sun ввел изображение большинство вещей в основу, даже при том, что это не было известно как основа тогда, был снабжен префиксом NX, для NeXT, и когда-то непосредственно перед тем, как Sun ввел изображение, в которое все было переименовано к NS. S, скорее всего, не обозначал Sun тогда, но после того, как Sun, ступивший в общее согласие, был то, что это выдержало за Sun соблюдать их участие.
у меня на самом деле была ссылка для этого, но я не могу найти его прямо сейчас. Я обновлю сообщение, если/когда я найду его снова.
Допустим, у вас есть объект oObject. Это может быть:
var oObject = {} ;
oObject["aaa"] = "AAA" ;
oObject["bbb"] = "BBB" ;
oObject["ccc"] = "CCC" ;
oObject["ddd"] = "DDD" ;
oObject["eee"] = "EEE" ;
Теперь предположим, что вы хотите узнать имена и значения его свойств, чтобы поместить их в переменные strName и strValue. Для этого вы используете конструкцию «for (x in o)», как в следующем примере:
var strName, strValue ;
for(strName in oObject)
{
strValue = oObject[strName] ;
alert("name : " + strName + " : value : " + strValue) ;
}
Конструкция «for (x in o)» будет перебирать все свойства объекта «o», и на каждой итерации , поместит в переменную "x" текущее имя свойства. Все, что вам нужно сделать, чтобы получить его значение, - это написать o [x], но вы это уже знали.
После некоторых размышлений и после просмотра комментария Хэнка Гэя я чувствую дополнительная информация может быть интересной.
Давайте будем наивными (и забудем о том, что "в JavaScript все объекты, включая массивы, являются ассоциативными контейнерами").
Другие ответы дали состав map
+ getOrElse
. Для записи вы можете «добавить» функцию возможно
к Option
следующим образом:
implicit def optionWithMaybe[A](opt: Option[A]) = new {
def maybe[B](f: A=>B)(g: =>B) = opt map f getOrElse g
}
Стоит отметить, что синтаксис функций высшего порядка в Scala обычно лучше, когда параметр функции идет последним. Таким образом, лучший способ организовать , возможно,
будет следующим:
def maybe[B](g: =>B)(f: A=>B) = opt map f getOrElse g
Это может быть использовано следующим образом:
val opt: Option[String] = ...
opt.maybe("") { _.toUpperCase }
Я не думаю, что есть. Лучшее, что я мог придумать, - это связать Option "map" и "getOrElse" вместе:
scala> var a: Option[String] = Some("hello")
a: Option[String] = Some(hello)
scala> a.map(_.toUpperCase).getOrElse("empty")
res19: java.lang.String = HELLO
scala> a = None
a: Option[String] = None
scala> a.map(_.toUpperCase).getOrElse("empty")
res21: java.lang.String = empty
Я не думаю, что есть. Тем не менее, я бы написал это так, чтобы получить по имени g
:
def maybe[A, B](a: Option[A])(f: A => B)(g: => B): B = a.map(f).getOrElse(g)
Это больше похоже на Scala и Haskell и немного приятнее в использовании.
Метод назывался бы fold, если бы он соответствовал соглашению (см. Either.fold, который является катаморфизмом для Either).