2014-02-05 1 views
3

Это оказывается вполне приемлемо, чтобы компилятор (по крайней мере в 2.10.3 и 2.11-М7):В Scala, что объясняет возможность затенения параметров?

def foo(n: Int) = { 
    val n = 3 
    n * 3 
} 

... это, вероятно, потому, что параметр существует во внешней рамки способа/функциональное тело, которое является техническим аргументом, но эффективно, это может привести к проблемам (как я только что узнал в реальном коде жизни), поэтому мне интересно, является ли это всего лишь неизбежным следствием разработки языка или если он действительно служит реальной (более высокой?) цели.

P.S. это даже нормально использовать другой тип для затенения имени:

def foo(n: Int) = { 
    val n = "hello" 
    n * 3 
} 

Примечание: существующего вопрос задает аналогичное, но еще концептуально очень разные вопросы: Why does Scala support shadow variables? -Вот один спрашивает об имени затенение в целом, в то время как я что связано с тем, что затенение (неожиданно) происходит и с параметрами, где не происходит очевидного подсекции - да, есть фигурные скобки, но один (возможно) предполагает, что параметры находятся в одной области.

EDIT: Haskell, примеры или языки FP, также позволяет это: foo x = let x = 4 in x является совершенно законным.

+1

Я не понимаю, почему это невозможно. В лучшем случае компилятор может выдать предупреждение о неиспользуемом параметре. Кроме того, поскольку вы явно не задаете тип возвращаемого значения, компилятор просто догадывается об этом из внутреннего выражения. – Ashalynd

+1

@ Ашалинд: нигде я не утверждаю, что это невозможно - совсем наоборот: я спрашиваю ** почему ** компилятор молча разрешает такую ​​конструкцию. Кроме того, вывод возвращаемого типа полностью не связан с вопросом. –

+3

Я не знаю, почему ... Однако, если это поведение немного вас устраивает, существует расширенная опция scaler, которая должна хотя бы предупредить вас –

ответ

1

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

Смежные вопросы