Как вы знаете Касбу MongoDB драйвер имеет функцию обновления, как это:Weird карринг функции обновления в MongoCollection класса драйвера Касба Монго
def update [A, B] (q: A, o: B)(implicit arg0: (A) ⇒ DBObject, arg1: (B) ⇒ DBObject) : WriteResult
Я думаю, что я понимаю выделку понятия Скале. Однако, насколько я знаю, эта функция обновления должна использоваться следующим образом:
collection.update(MongoDBObject(...), MongoDBObject(...))
Это меня смущает. Как я не заполнить второй список аргументов метода обновления, я думаю, что выше выражение будет возвращать функцию, как:
(implicit arg0: (A) ⇒ DBObject, arg1: (B) ⇒ DBObject) => WriteResult
Однако это не так. Это из-за неявного определения аргументов во втором списке аргументов функции?
Если у вас есть неявное значение типа 'A => DBObject' и неявное значение' B => DBObject' в области видимости, то эти значения применяются при вызове 'update'. Хотя, если вы хотите частично применить функцию, вы должны сделать это, вызвав 'collection.update (MongoDBObject (...), ...) _' (добавление подчеркивания) –
Я не понимаю, как это сделать однако в сфере охвата. Я думаю, мне нужно будет увидеть исходный код под реализацией currying, чтобы полностью понять, что он действительно находится в сфере охвата. Мне трудно понять, когда что-то находится в сфере видимости или нет. –
Я не знаю casbah, поэтому я, вероятно, не могу вам помочь. Тем не менее, это меньше о карри, чем о неведениях. Похоже, в этом случае currying требуется только для добавления неявных аргументов (потому что вы не можете указать, например, 'def f (a: int, implicit b: Int)', но только 'def f (a: Int) (неявный b : Int) 'по какой-либо причине) Возможно, вы можете обновить вопрос, включив в него все свои импортные ресурсы, чтобы можно было выяснить, где находятся импликации. –