Почему и когда я должен следовать за именем метода с _?

Я немного шаток на правилах относительно того, когда Вам нужен a _ после метода для использования его в качестве функции. Например, почему там различие между Fooи Nil :: в следующем?

def square(n: Int) = n * n  
object Foo { def ::(f: Int => Int) = f(42) }

// ...

scala> Foo.::(square)
res2: Int = 1764

scala> Nil.::(square) 
<console>:6: error: missing arguments for method square in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
   Nil.::(square)
          ^
scala> Nil.::(square _) 
res3: List[(Int) => Int] = List(<function1>)
12
задан hammar 12 June 2013 в 09:17
поделиться

1 ответ

        Dim aDate As DateTime = #3/1/2008# 'sample date
    Dim StartDate As DateTime = aDate.AddMonths(-1).AddDays(-(aDate.Day - 1))
    Dim EndDate As DateTime = StartDate.AddDays(DateTime.DaysInMonth(StartDate.Year, StartDate.Month) - 1)

    'to access just the date portion
    ' StartDate.Date
    ' EndDate.Date
-121--2091515-
  1. Да, конечно.
  2. Начните с Subversion и клиента TortoureSVN. Он имеет отличную поддержку, отличные инструменты и, как правило, гораздо более простой в настройке и использовании, чем Git.

Превосходное руководство Subversion manual доступно бесплатно.

-121--3030618-

При пропуске всех параметров в частично примененном выражении функции необходимо следовать за ним с помощью _ , если компилятору не требуется тип функции в месте ее использования.

При вызове метода :: в Foo компилятор ожидает для параметра тип Int = > Int . Таким образом, вы можете безопасно опустить подчеркивание после квадрат в этой позиции.

Однако метод :: в Nil может принимать параметр любого типа. Поэтому вместо того, чтобы предполагать, что вы хотели частично применить функцию, он жалуется, если вы не сделать его абсолютно явным, добавив _ .

Итак, таковы правила... Я не могу на самом деле просветить вас о почему таковы правила; может быть, кто-то еще, кто лучше знает компилятор, систему типов и дизайн языка, сможет сказать вам почему. Но я предполагаю, что без этих правил во многих местах была бы опасность случайной двусмысленности.

15
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: