无法确定 lambda 表达式代表什么意思

3

我正在学习Unity中的面向对象编程,并发现了使用oop构建代码的游戏,问题是我无法弄清楚"private bool IsInitialized => _bulletPool != null;"这行代码的含义。

我已经了解了lambda表达式,并且理解它可以像UnityAction一样使用,或用于编写更短的函数。

using System;
using UnityEngine;
using UnityEngine.Events;

[RequireComponent(typeof(CapsuleCollider2D))]
[RequireComponent(typeof(ShipAudio))]
public abstract class Ship : MonoBehaviour
{
[SerializeField] private Vector2 _shootDirection;

private BulletPool _bulletPool;

protected CapsuleCollider2D Collider;

private bool IsInitialized => _bulletPool != null; //this line

public event UnityAction Shooted;
public event UnityAction TookDamage;
public event UnityAction Died;

private void Awake()
{
    if (_shootDirection == Vector2.zero)
        throw new ArgumentException(nameof(_shootDirection));

    Collider = GetComponent<CapsuleCollider2D>();
    Collider.isTrigger = true;
}

public void Init(BulletPool bulletPool)
{
    _bulletPool = bulletPool;
}

public void TakeDamage()
{
    OnTakeDamage();
    TookDamage?.Invoke();
}

public void Die()
{
    OnDie();
    Died?.Invoke();
}

public void Shoot()
{
    if (IsInitialized == false)
        throw new Exception("Impossible to shoot. Bullet pool is not stated");

    if (_bulletPool.TryGetObject(out Bullet bullet) == false)
        throw new Exception("Impossible to spawn bullet");

    bullet.Show();
    bullet.transform.position = transform.position;
    bullet.Init(_shootDirection);

    Shooted?.Invoke();
}

protected abstract void OnTakeDamage();

protected abstract void OnDie();
}
3个回答

3

这是一个函数或属性getter的快捷语法。

private bool IsInitialized => _bulletPool != null;

做完全相同的事情。

private bool IsInitialized
{
    get
    {
        return _bulletPool != null;
    }
}

1

这不是Lambda表达式,而是表达式体属性。基本上,它等同于:

private bool IsInitialized
{
    get
    {
        return _bulletPool != null;
    }
} 

你可以自己看到反编译@sharplab

查看更多 - 表达式主体成员


-1
在我看来,Lambda表达式是条件语句的简化版本。在代码中,条件是bulletpool!=null
由于结果为真/假,所以将其分配给了IsInitialized布尔值。
希望你理解。

2
这是不正确的。bulletpool != null 是一个表达式,该表达式的值并没有被赋给 IsInitialized。该表达式本身被分配为 IsInitialized 的 getter 方法的主体。这意味着每次获取 IsInitialized 的值时,都会在那一刻计算该表达式的值。 - Logarr
非常感谢,现在我对这个表达式有了更全面的了解。 - Panendra Ommina

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接