0 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)
ویرایش شده قبل توسط

تفاوت یک تابع در Scala که با def تعریف می شود با تابعی که بصورت anonymous تعریف می شود و در یک val ذخیره می شود چیست؟

  val f1: (Int) => Int = x => x*x*x
//or
  val f1 = ((x : Int) => x*x*x)

  def f2(x: Int) = x*x*x

هر دو تابع فوق را می توان به یک Higher-order function بعنوان پارمتر ارسال کرد.

2 پاسخ

0 امتیاز
قبل توسط (1.1هزار امتیاز)
 
بهترین پاسخ

متدی که با val تعریف می شود در زمان تعریف evaluate می شود.

متدی که با def تعریف می شود در هر بار فراخوانی evaluate می شود. به عبارت دیگر در هر بار فراخوانی متدی که با def تعریف می شود یک instance جدید از Function1 ساخته و فراخوانی می شود.

val test: () => Int = {
  val r = util.Random.nextInt
  () => r
}

test()
// Int = -1049057402
test()
// Int = -1049057402 - same result

def test: () => Int = {
  val r = util.Random.nextInt
  () => r
}

test()
// Int = -240885810
test()
// Int = -1002157461 - new result
+1 امتیاز
قبل توسط (1.2هزار امتیاز)
در عمل تفاوتی ندارند اما یک نکته ظریف اینکه هرچیزی که با val تعریف میشه فقط یکبار مقدار دهی میشه ولی هرچیزی که با def تعریف بشه در هربار فراخوانی initialize یا مقدار دهی میشه.

سوالات مشابه

0 امتیاز
1 پاسخ 376 بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 464 بازدید
0 امتیاز
1 پاسخ 648 بازدید
0 امتیاز
1 پاسخ 459 بازدید
0 امتیاز
1 پاسخ 629 بازدید
0 امتیاز
1 پاسخ 735 بازدید
0 امتیاز
0 پاسخ 2.3هزار بازدید
0 امتیاز
1 پاسخ 582 بازدید
...