2016-02-09 1 views
0

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

Но они также против выражений. Я думал, это потому, что они могут включать переменные. Но даже такие выражения, как 1+2, нет (см. Первый ответ в What does the word "literal" mean?).

Так что, когда я определить переменную следующим образом:

var=1+2 

1+2 не является буквальным, даже если это не имя, и вычисляется в одно значение. Тогда я мог догадаться, что это потому, что он не представляет целевое значение напрямую; другими словами, буква означает значение «точно так же, как и».

Но как же возможно, что функция, подобная этой, является буквальной (как указал на тот же ответ)?

(x) => x*x 
+1

Понятие буквального и выражения различается от одного языка программирования к другому (не то же самое в Common Lisp и Ocaml и C) –

ответ

1

только анонимные функции могут быть буквальным, потому что они не связаны с идентификатором так (х) => х * х является буквальным, потому что это анонимная функция, или функция буквальным но

void my_func() 
{#something} 

не является буквальной причиной, связанной с идентификатором; прочитать эти, https://en.wikipedia.org/wiki/Literal_(computer_programming) https://en.wikipedia.org/wiki/Anonymous_function

1

Выражения можно разделить на два основных типа: атомное выражения и составные выражения.

Композитные выражения могут быть разделены оператором и т. Д .; атомные выражения можно разделить на переменные, константы и литералы. Я думаю, что разные авторы могут использовать здесь другие категории или границы, поэтому это может быть не универсальным. Но я буду спорить, почему эта категоризация может иметь смысл.

Понятно, почему строки или цифры являются литералами или почему сумма не является. Вызов функции можно считать составной, поскольку она работает с подвыражениями - ее параметрами. Определение функции не работает при подвыражениях. Только когда вызывается так определенная функция, этот вызов передает параметры в функцию. На компилируемом языке анонимная функция, скорее всего, будет заменена целевым адресом, где находится соответствующий код, - это местоположение памяти, очевидно, не зависит от какого-либо подвыражения.

@ Ответы rdRahul на ответ this Wikipedia article, в котором говорится, что литералы объектов, такие как {"cat", "dog"}, могут считаться литералами. Это легко можно утверждать, указав, что объект, являющийся значением выражения, является всего лишь одной непрозрачной вещью, такой как указатель на расположение памяти объекта.

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

  • Нет связанных вопросов^_^