将过滤器应用于字符串,而不是字符

时间:2017-03-13 10:28:52

标签: scala

从Scala开始。我想编写这个代码:

def getPortNamePart(portName: String) {

  val maybePortName = portName.filter(_.trim.length > 0)
  val portNamePart = maybePortName.map(portName => s"_$portName").getOrElse("")
}

println(getPortNamePart("something"))   // expected "something"
println(getPortNamePart(""))            // expected ""
println(getPortNamePart("   "))         // expected ""

但我明白了:

:10:错误:值trim不是Char的成员              val maybePortName = portName.filter(_。trim.length> 0)

这告诉我过滤器正在应用于字符串的每个字符。

但我不希望这样,我希望将过滤器应用于字符串。如何对我的过滤进行编码,以便它在字符串级别发生?

3 个答案:

答案 0 :(得分:3)

如果我理解你想要达到的目标:

union accel_t_gyro_union
{
  struct
  {
    uint8_t x_accel_h;
    uint8_t x_accel_l;
    uint8_t y_accel_h;
    uint8_t y_accel_l;
    uint8_t z_accel_h;
    uint8_t z_accel_l;
    uint8_t t_h;
    uint8_t t_l;
    uint8_t x_gyro_h;
    uint8_t x_gyro_l;
    uint8_t y_gyro_h;
    uint8_t y_gyro_l;
    uint8_t z_gyro_h;
    uint8_t z_gyro_l;
  } reg;
  struct
  {
    int x_accel;
    int y_accel;
    int z_accel;
    int temperature;
    int x_gyro;
    int y_gyro;
    int z_gyro;
  } value;
};

def getPortNamePart(portName: String) = Option(portName).filter(_.trim.length > 0).map(portName => s"_$portName").getOrElse("") 适用于您应用它的完全相同的集合(并且filter可以被视为字符集合)。因此,如果您想要String进行Option过滤,则需要首先使用Option包装它。

答案 1 :(得分:0)

这就是过滤器对字符串的作用。你想要的是:

if(portName.trim.length>0) portName else ""

答案 2 :(得分:0)

对于这个简单的例子,你不需要任何功能结构。用简单的if .. else语句

来做