2016-10-26 3 views
0

объяснений я наткнулся ниже функции,Groovy синтаксис

def some_name = {a, b, c -> a==c?bumpUp(b):b} 

хотя я могу понять, что эта функция является своего рода короткой стороны (не могу вспомнить или выяснить длинную форму). Он принимает на 3-х аргументов, сравнивая в равной степени через & с, если равно вызов другой функции

bumpUp(b)

Итак вопросы:
1. мое предположение о логике права?
2. Каков длинный путь написания этого и что он называется?
3. что является :b делать в bumpUp(b):b

+0

сделал некоторые заводной чтение. И это объясняется в разделе «закрытия», – OK999

ответ

1

Ternary operator, который включает в себя как? и a:, является коротким и чистым способом использования эквивалента для оператора if. Таким образом, сокращение объема кода делает его более читаемым.

Например:

String result = (1==1) ? 'equals' : 'not equals' 

Позволяет объяснить строку выше:

Если условие (1 == 1) истинно, то задание будет результат 'равно', иначе назначение результата будет 'не равно'.

Долгий путь вы, наверное, знакомы с следующим образом:

String result = "" 
if(1==1) { 
    result = 'equals' 
} else { 
    result = 'not equals' 
} 

Для того, чтобы ответить на ваши вопросы 3:

  1. Ваше предположение о логике права. :-)
  2. Длинный способ написания описан в разделе вопроса 2 раздела.
  3. : b относится к разделу else. ':' является просто разделителем для переменной b. В случае, если if (a == c) является ложным, перейдите к коду раздела после «:», и в этом конкретном случае это b.

вопрос 2 раздела:

if(a==c){ 
    some_name = bumpUp(b) 
} else { 
    some_name = b 
} 
1

: операция троичного оператора, который включает в себя одновременно? и:, как если заявление:

Boolean?true:false 

эквивалентно

if(Boolean) 
    true 
else 
    false 

КРОМЕ, что она возвращает значение истина или ложь, так:

a==c?bumpUp(b):b 

, как

if(a == c) 
    return bumpUp(b) 
else 
    return b 

Также обратите внимание, что groovy имеет как horthand, где вы устраняете центральное значение, называемое оператором «Элвис». Он часто используется, чтобы дать переменным значение по умолчанию. Если вы хотите распечатать значение имени, но когда это нулевой вы не хотите печатать нуль, вы можете сказать:

println "Your name is ${name?:'unknown'}" 

Если имя переменной не имеет значения, он будет печатать «неизвестно» вместо null, но для «groovy true» (не пустой или пустой) он вернет значение запроса.

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