从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)
这告诉我过滤器正在应用于字符串的每个字符。
但我不希望这样,我希望将过滤器应用于字符串。如何对我的过滤进行编码,以便它在字符串级别发生?
答案 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语句
来做